Node.js/MySQL:在 Node.js 的错误日志中打印实际查询

新手上路,请多包涵

我有一些 Node.js 代码尝试更新数据库,如下所示:

 connection.query(command, function(err,rows) {
        if (err){
            console.log(command);
            console.log("ERROR");
            console.log(err);
            return;
        }
        console.log("good");
    });

以上针对“command”的不同值重复运行,从而对数据库产生不同的查询。问题是当出现错误时,错误的查询会打印在 console.log(command) 中。这是因为查询加入队列的时间和实际执行查询的时间是不一样的,所以每次的“command”值都不一样。有没有解决的办法?

注意: console.log(err) 打印错误本身,也是查询的一部分,但它只打印发生错误的行。我想打印整个查询。

原文由 user308485 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 950
2 个回答

根据 文档,您可以使用 query.sql 来获取实际执行的查询。

 var post  = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
  // Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'

在这种情况下,它将是

connection.query(command, function (err, rows) {
    if (err) {
        console.log('this.sql', this.sql); //command/query
        console.log(command);
        console.log("ERROR");
        console.log(err);
        return;
    }
    console.log("good");
});

原文由 Sridhar 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果 @Sridhar 的回答 对你不起作用,可能是因为你使用 的是尚未返回 SQL 查询的 promise API,你可以使用:

 const sql = connection.format("SELECT * FROM table WHERE foo = ?", ["bar"]);
console.log(sql);
const [rows] = await connection.query(sql);

文档: https ://github.com/mysqljs/mysql#preparing-queries

原文由 Yves M. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏