Node.JS MySQL 将结果记录到控制台而不被要求和奇怪的行为

Posted

技术标签:

【中文标题】Node.JS MySQL 将结果记录到控制台而不被要求和奇怪的行为【英文标题】:Node.JS MySQL logging result to console without being asked to and acting strangely 【发布时间】:2020-12-26 06:56:36 【问题描述】:

我在使用 Node.JS mysql 时遇到了一个新的非常奇怪的错误。即使我的代码中没有记录它的行,我似乎也在控制台中记录结果;同样,当我记录结果时,它会记录一个与看似自动记录的结果不同的结果,以及我使用 phpMyAdmin 时出现的结果。

这是我的代码(我已将其放入自己的文件中,以确保在我的其他文件中其他地方没有触发 console.log 的事件):

const config = require("./config.json");
const colors = require('colors');
var mysql = require('mysql');

function get_datetime() 
    let date_ob = new Date();

    // current date
    // adjust 0 before single digit date
    let date = ("0" + date_ob.getDate()).slice(-2);

    // current month
    let month = ("0" + (date_ob.getMonth() + 1)).slice(-2);

    // current year
    let year = date_ob.getFullYear();

    // current hours
    let hours = date_ob.getHours();

    // current minutes
    let minutes = date_ob.getMinutes();

    // current seconds
    let seconds = date_ob.getSeconds();

    // prints date & time in YYYY-MM-DD HH:MM:SS format
    var dateTimeOfMessage = year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds;
    return dateTimeOfMessage;


var currentdate = get_datetime();
// Check for expired users by taking current date from database for all users where date is within a reasonable range. (e.g. WHERE date = 2 days lower than get_datetime().)
// Remove users who have had the role for over 2 days unless they bought it.

var con = mysql.createConnection(
    host: config.database.host,
    user: config.database.user,
    password: config.database.password,
    database: config.database.name
);

con.connect(function(err) 
    if (err) throw err;
    var sql = "SELECT userID FROM premium_trials WHERE DATEDIFF('" + currentdate + "', datereceived) >= 2 AND boughtPremium = 0;";
    console.log(sql);
    con.query(sql, function(result, err) 

        if (err) console.log(err);
        con.end();

        if (result == null || result == "") 

            console.log("null value".yellow);
            console.log(result + "        ---        Result log on line 53");

         else 
            console.log("Still working".green);
            for (i = 0; i < result.length; i++) 
                console.log(result[i].userID);
            
        

    );
);

这是我的控制台输出的文本版本:

SELECT userID FROM premium_trials WHERE DATEDIFF('2020-09-07 22:25:43', datereceived) >= 2 AND boughtPremium = 0;
[ RowDataPacket  userID: '216324181783085056'  ]
null value
null        ---        Result log on line 53

我还附上了 PHPMyAdmin 输出的图像,显​​示它是正确的。

【问题讨论】:

"null value".yellow 是什么? 它只是使文本在控制台中显示为黄色,如屏幕截图所示。它来自颜色模块。 【参考方案1】:

您已经反转了errresult。对于回调,错误通常是回调的第一个参数,结果是其他参数。

你可以在the example here看到它。

所以

con.query(sql, function(result, err) 

应该是

con.query(sql, function(err, result) 

【讨论】:

以上是关于Node.JS MySQL 将结果记录到控制台而不被要求和奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js 将 JSON 写入 mysql 数据库

如何从回调函数中修改全局变量。在 node.js 中

Node.JS 再次运行 Node-Mysql 查询而不停止 node.js 脚本

使用 Node.JS 查询 MySQL 并在网页中显示结果

Node.js mysql 结果到数组

将 node.js sql 结果返回到其他文件