首页 > 解决方案 > Node 和 Axios - 如何发出顺序请求

问题描述

我需要向我的 API 发出 2 个请求以在 2 个不同的表中插入数据:

工作流程:

请求获取最后一个 id + 1 => 创建我需要的数组(last_id,values)=> MySql 中的两个 INSERT,第一个使用各种数据,第二个使用我创建的数组。

router.post("/addentry", function (req, res) {
    
let sql = "SELECT MAX(id) + 1 AS last_id FROM entries;"; // I get the id

  let query = connection
    .query(sql, (err, results) => {
      if (err) throw err;
     
     res.header("Access-Control-Allow-Origin", "*");
        
    // put the id in a variable

    var last_id = results[0].last_id;

    var categoriesMap = req.body.categories;

    var valCat = Object.values(categoriesMap);

    // I create the array with other data
 
    var catArray = valCat.map((item) => {
        return [last_id, item];
      });

    })
    .then((catArray) => {
    let sql = `BEGIN; INSERT INTO entries (title,kindof) VALUES("${[
        req.body.title,
      ]}","${req.body.kindof}");
     INSERT INTO categories_main (entry_id, cat_id) VALUES  ? ;
     COMMIT;`;

     let query = connection.query(sql, [catArray], (err, results) => {
        if (err) throw err;
        console.log(results);
        res.header("Access-Control-Allow-Origin", "*");
        res.send("Entry added to DB");
      });
    });  

第一部分工作得很好,但第二部分我得到了

TypeError: connection.query(...).then is not a function

知道怎么做吗?

谢谢

标签: mysqlnode.jsaxios

解决方案


首先,您应该确保使用node-mysql2而不是node-mysql. node-mysql2具有内置功能,可帮助在单个连接中进行多个查询。我已经为您提供了这个答案,它举例说明了如何正确使用它。

继续前进,在您完成之后,为了能够使用您的result对象,您将需要JSON.

以下语法是您可能想要使用的:

var stringify = JSON.parse(JSON.stringify(results[0]));
for (var i = 0; i < stringify.length; i++) {
    var last_id = stringify[i]["last_id"];
}

推荐阅读