问题描述
createNewOrder: (data,callBack) => {
pool.query(
`Insert into ordering (supplycontract) values (?)`,[
data.supplierId
],(error,results,fields) => {
if(error){
return callBack(error)
}
pool.query(
`select id from ordering order by id desc limit 1`,[
data.articleId
],results1,fields) =>{
if(error){
return callBack(error)
}
let orderid = results1[0].id;
console.log(orderid);
pool.query(
`Insert into position (quantity,delivery,ordering,positioninorder,articlecontract) values(?,?,1,?)`,[
data.quantity,new Date(),orderid,data.articleId
],results3,fields) => {
if(error){
callBack(error)
}
//callBack(null,results3)
}
);
}
);
return callBack(null,results)
}
);
}
Error: ER_PARSE_ERROR: You have an error in your sql Syntax; check the manual that corresponds to your MysqL server version for the right Syntax to use near
'position (quantity,articlecontract) values(54,' at line 14
code: 'ER_PARSE_ERROR',errno: 1064,sqlMessage: "You have an error in your sql Syntax; check the manual that corresponds to your MysqL server version for the right Syntax to use near 'position (quantity,' at line 1",sqlState: '42000',index: 0,sql: "Insert into position (quantity,'2021-07-11 19:18:39.334',16,5)"
}
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:518:11)
code: 'ERR_HTTP_HEADERS_SENT'
解决方法
您的代码有多个问题
-
return callBack(null,results)
应该在第三个查询的回调中。 -
callBack(error)
在第三个查询的错误处理程序中应该有像return callBack(error)
这样的返回语句。 - SQL 错误:这是因为您使用保留关键字
position
作为表名。如果您的 SQL 查询包含保留关键字,您可以使用反引号"``"
来转义保留关键字。
createNewOrder: (data,callBack) => {
pool.query(`Insert into ordering (supplycontract) values (?)`,[data.supplierId],(error,results,fields) => {
if (error) {
return callBack(error)
}
pool.query(`select id from ordering order by id desc limit 1`,[data.articleId],results1,fields) => {
if (error) {
return callBack(error)
}
let orderid = results1[0].id;
console.log(orderid);
pool.query("Insert into `position` (quantity,delivery,ordering,positioninorder,articlecontract) values(?,?,1,?)",[data.quantity,new Date(),orderid,data.articleId],results3,fields) => {
if (error) {
return callBack(error)
}
return callBack(null,results)
});
});
});
}
注意事项
- 当您尝试发送两次响应时会出现错误
Cannot set headers after they are sent
,简单来说,如果您在一个请求周期内两次调用res.json()
或res.status().json()
,您将得到上述结果错误。
function myController(req,res) {
res.json({ status: "success" });
res.json({ status: "success" }); // this will throw the error defined above
}
- 要使用保留关键字,请使用反引号。或者更好,不要使用保留关键字。