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

19

我有一些Node.js代码,试图更新一个数据库,类似以下内容:

connection.query(command, function(err,rows) {
        if (err){
            console.log(command);
            console.log("ERROR");
            console.log(err);
            return;
        }
        console.log("good");
    });
上述代码会针对不同的“命令”重复运行,从而生成不同的数据库查询。问题在于当出错时,在console.log(command)中打印错误查询。这是因为添加到队列中的查询时间和实际执行查询的时间不同,所以每个时间点上“命令”的值并不相同。有没有解决方法?
注: console.log(err) 会打印出错误本身以及一部分查询内容,但它只会打印出出错所在的那一行。我想打印出整个查询。
4个回答

40
根据文档,您可以使用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");
});

2
对我没用。 `throw err; // 重新抛出非MySQL错误 ^ReferenceError: query未定义` - Sudhir K Gupta
1
@SudhirKGupta 你应该使用普通函数而不是箭头函数。 - Sridhar
@Sridhar,我没听懂你的意思。能否请您提供一段示例代码? - Sudhir K Gupta

15

0

这里的最佳答案可以是这样的 仅适用于vscode

在调试模式下运行代码 在if(err)块中放置调试点 在调试控制台中输入以下内容

copy(error.sql)

它将给你精确的查询。 希望能帮到你。


0
let SqlString = require('sqlstring'); //global declare
let sql = "select * from abc where id = ? and name = ?"
const params_list = [5, "aaa"];

console.log('sql: ', SqlString.format(sql, params_list));

这是一个完整的场景,用于打印带参数的格式化SQL查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接