首页 > 解决方案 > mysql插入后无法获取insertId

问题描述

设置:react、axios、mysql、node.js

我试图在插入后的 axios 发布请求中从 mysql 访问 results.insertId ,我看到它记录了正确的结果,但是之后当我尝试将它分配给一个状态时,它返回空。我已经看到这可能是一个异步问题,但我不明白这里的问题,因为我可以正确记录数据。我也是 promises 和 async 的新手,但最终目标是在 mysql 中插入一个页面元素,然后使用新页面的 id 作为变量将用户重定向到创建的页面,如果有人有更好的解决方案,我很开放对任何事情。

我的 node.js 声明:

app.post('/api/insertpage', (req, res) => {

    const name = req.body.name;
    const Link = req.body.Link;

    const sqlInsert = "INSERT INTO pages (name, Link) VALUES (?,?);";   
    
    db.query(sqlInsert, [name, Link], (err, results) => {

        if (err) {
            res.send({ err: err });        
            console.log("the error is:" + err);
        }

        if (results.insertId) {
            res.json({ insertId: results.insertId })
            console.log(results);
            console.log(results.insertId);
        } else {
            res.send({ message: "not working"});
            res.send("not working"); 
        }
    })
});

我的 axios 请求:

Axios.post("backendurl/api/insertpage" , {
      name: name,
      Link: Link,
  })
  .then((results) => {     
      console.log(results.data.insertId);
      setPageId(results.data.insertId); 
// my state is defined in a functional component as  const [pageId, setPageId] = useState();
// I also tried with useState("");
      console.log(results.data)
      if (results.data.message) {
          console.log("failed")

      } else {
          if (results.data.insertId) {
              console.log("id present")
                  console.log(results.data.insertId);
                  console.log(pageId);
                  
          }  else {
                  console.log("no id")
              }
          if (pageId !== "") {
              console.log("id NOT null IT IS WORKING")
              console.log(pageId);
          } else {
              console.log("id IS null")
          }
      }
   })

这是日志的样子,首先记录 insertId,然后是完整响应:

在此处输入图像描述

标签: mysqlnode.jsreactjsaxios

解决方案


推荐阅读