繁体   English   中英

MySql命令在终端上有效,但在节点js上无效

[英]MySql command is work from terminal but is not working from node js

我的nodejs网站出现一个奇怪的问题。 我有执行SQL命令的功能。 它运行良好,但在运行服务器几天后仍能正常运行。 它开始返回一个空数组!!! 当我重新启动服务器时,它又恢复了工作,但几天后仍然崩溃。

这是错误(空数组错误):

TypeError: Cannot read property '0' of undefined
    at Query._callback (/home/mikro/www/my_modules/database.js:47:27)
    at Query.Sequence.end (/home/mikro/www/node_modules/mysql/lib/protocol/sequences/Sequence.js:86:24)
    at /home/mikro/www/node_modules/mysql/lib/protocol/Protocol.js:226:14
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickDomainCallback (internal/process/next_tick.js:128:9)

这是功能:

login: function (username, password, callback) { 
        db.query('SELECT id, password, expdate FROM users WHERE username=' +
            mysql.escape(username) + ';', function (err, rows) {
            var row = rows[0];
            if (err) console.error(err)
            if (!row)
                callback(ERR_USER_NOT_FOUND, null);
            else
            bcrypt.compare(password, row.password, function (err, result) {
                if (result){
                    var expdate = row.expdate;
                    var currDate = moment(new Date()).format('YYYY-MM-DD HH:mm:ss');
                    if (moment(currDate).isAfter(expdate) && row.id !== 1)
                        callback ('Please pay your monthly fee to be able to login', null);
                    else
                        callback(null, row)
                }
                else {
                    callback(ERR_WRONG_PASSWORD, null);
                }
            })
        });
    }

我有Ubuntu服务器,并使用nginx代理运行pm2。 我的依赖:

"dependencies": {
    "bcrypt-nodejs": "latest",
    "body-parser": "~1.16.0",
    "connect-flash": "^0.1.1",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.0",
    "ejs": "~2.5.5",
    "express": "~4.14.1",
    "express-session": "^1.15.1",
    "moment": "^2.18.1",
    "morgan": "~1.7.0",
    "mysql": "latest",
    "serve-favicon": "~2.3.2",
    "socket.io": "latest",
    "jwt-simple": "latest",
    "jsonfile": "latest",
    "express-mysql-session": "latest",
    "express-rate-limit": "latest"
  }

UPDATE1

这是连接代码:

var mysql  = require('mysql');
var db     = mysql.createConnection(require('./config'));
db.connect();

首先,您必须处理潜在的错误,如果err为null,则可以使用返回的结果。 而且返回的结果可能为空

if (err) callback(/*undefined_error*/, null);
if (!rows || rows.length == 0) callback(ERR_USER_NOT_FOUND, null);
var row = rows[0];
............

如果我正确理解了该问题,则可能是由于网络超时或连接空闲超时导致的MySQl连接重置问题。

最好在MySql连接代码处检查错误。

例如,MySql连接问题之一记录在: nodejs mysql错误:连接丢失服务器关闭了连接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM