【问题标题】:Node.js/MySQL: Printing actual query in error log in Node.jsNode.js/MySQL:在 Node.js 的错误日志中打印实际查询
【发布时间】:2017-05-01 09:19:33
【问题描述】:

我有一些 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) 打印错误本身,也是查询的一部分,但它只打印发生错误的行。我想打印整个查询。

【问题讨论】:

    标签: mysql node.js


    【解决方案1】:

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

    【讨论】:

    • 对我不起作用。 throw err; // Rethrow non-MySQL errors ^ ReferenceError: query is not defined
    • @SudhirKGupta 你应该使用普通函数而不是箭头函数
    • @Sridhar,我没听懂你。请问可以提供示例代码吗?
    【解决方案2】:

    如果@Sridhar answer 对您不起作用,可能是因为您使用的是doesn't yet return the SQL query 的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

    【讨论】:

      【解决方案3】:
      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 查询的完整场景。

      【讨论】:

        猜你喜欢
        • 2011-08-03
        • 2016-05-29
        • 2016-08-21
        • 1970-01-01
        • 1970-01-01
        • 2018-01-19
        • 2011-10-27
        相关资源
        最近更新 更多