mysql - 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
知道怎么做吗?
谢谢
解决方案
首先,您应该确保使用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"];
}
推荐阅读
- amazon-web-services - 如何将 AWS Lambda 设置为通过 HTTP/API 网关异步调用?
- android - 如何在android应用程序中检查任何字符串的语言
- highcharts - 当我们将一个树图中的同一项目与其他树图中的项目进行比较时,它的值不能正确地表示它的大小
- javascript - 如何用 * 和 - “理论”写一封信
- javascript - 图像因 onmouseover 事件而抖动
- assembly - 直接和间接寻址和偏移
- javascript - jQuery var没有进入函数
- php - Laravel 手动链接存储
- android - 我在 FirebaseAppIndex 中添加 ArrayList 但无法从 Google 搜索中搜索所有列表项
- python - 将列表转换为元组会导致元组有内存开销吗?