【问题标题】:Axios callback function not working in put methodAxios 回调函数在 put 方法中不起作用
【发布时间】:2021-06-11 11:02:33
【问题描述】:

我正在尝试使用 Axios 更新 MySQL 数据库。我的问题是数据更新成功,但 axios 回调不起作用。而发布,删除和回调工作完美。下面是我的代码:

前端代码:

 UpdateTeacher = (id) =>{
      const editedata = {
        id: id,
        fname: this.state.fname,
        lname: this.state.lname,
        roles: this.state.roles,
        join_date: this.state.join_date,
        email: this.state.email,
        assign_subject: this.state.assign_subject
      };
    
     axios.put(`http://localhost:3001/edit/${id}`, editedata)
      .then((res) => {
        // I cant get any console.log neither any state set here
        this.setState({
          success: "Update data Successfully!", 
          type:"success",
          isEdit:false
        });
       
        console.log(res.data.json);
      }).catch((err) => {
        console.log(err);
        this.setState({ 
            error: "Error! Please try again later!", 
            type:"error"
        });
      })
  }

后端代码:

app.put("/edit/:id", (req, res) => {

    const {id }       = req.params.id;
    const fname     = req.body.fname;
    const lname     = req.body.lname;
    const roles     = req.body.roles;
    const joining   = req.body.join_date;
    const email     = req.body.email;
    const assign_subject  = req.body.assign_subject;
    
   var updateData = req.body;
   console.log(updateData);
 
db.query(`UPDATE teacher SET fname=?, lname=?, roles=?, join_date=?, email=?, assign_subject=? WHERE id=?`,[fname, lname, roles,joining,email,assign_subject, req.params.id]),(err,result)=>{

    if (err) return console.error(err.message);
    res.status(200).send(results);
    console.log("Updated Row(s):", results.affectedRows);
}
});

【问题讨论】:

    标签: node.js reactjs express axios response


    【解决方案1】:

    这里有一些问题可能会导致问题。在您的服务器代码中,您必须在发生错误时返回响应,否则服务器将挂起。

    类似这样的:

    if (err) return res.status(500).send(err.message);
    

    另外,您发送的是results,但您在db.query 回调中声明的变量是result。所以代码应该是

    res.status(200).send(result);
    console.log("Updated Row(s):", result.affectedRows);
    

    第三,在您的客户端代码中,您使用console.log(res.data.json) 登录,但我认为应该只是console.log(res.data)

    【讨论】:

    • 感谢您的快速回答。作为您的回答,我更改了变量但没有运气仍然状态首先是“待定”,然后有时会失败。这是新代码。 db.query(UPDATE 老师 SET fname=?, lname=?, roles=?, join_date=?, email=?, assign_subject=? WHERE id=?, [fname, lname, roles,joining,email,assign_subject, req.params.id]),(err,result)=>{ if (err) return res.status(500).send(err.message); res.status(200).send(result); console.log("Updated Row(s):", result.affectedRows); } });
    • @B.M.RafiulAlam 我在回答中添加了另一个我看到的问题。看看是否有帮助。如果没有,你能显示你的服务器日志的输出吗?还可以尝试在客户端日志之前放置一个带有简单字符串(如“--------”)的控制台日志。如果传递给 console.log() 的值是 undefined 或 null,您通常根本看不到任何显示。
    • 最后我发现主要问题出在 MySQL 查询中。我不确定到底在哪里!我的新工作代码在服务器端:db.query('UPDATE teacher` SET ? WHERE id=?', [req.body, req.params.id], function(err, result) { if(err){ console.log(err); }else{ res.send(result); }; }); })`
    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2018-05-20
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多