微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决sql errno: '1064' 和ERR_HTTP_HEADERS_SENT 错误?

如何解决如何解决sql errno: '1064' 和ERR_HTTP_HEADERS_SENT 错误?

我有以下代码,其中包含几个 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){
                                    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'

解决方法

您的代码有多个问题

  1. return callBack(null,results) 应该在第三个查询的回调中。
  2. callBack(error) 在第三个查询的错误处理程序中应该有像 return callBack(error) 这样的返回语句。
  3. 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)
            });
        });
    });
}

注意事项

  1. 当您尝试发送两次响应时会出现错误 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

}
  1. 要使用保留关键字,请使用反引号。或者更好,不要使用保留关键字。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。