MySql 命令可以从终端运行,但不能从节点 js 运行
MySql command is work from terminal but is not working from node js
我的 nodejs 网站有一个奇怪的问题。我有一个函数可以执行 SQL 命令。它工作完美,但在 运行 宁服务器几天之后。它开始 return 一个空数组!!!当我重新启动服务器时,它又恢复了工作,但几天后仍然崩溃。
这是错误(空数组错误):
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"
}
更新1
这是连接码:
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 Error: Connection lost The server closed the connection
我的 nodejs 网站有一个奇怪的问题。我有一个函数可以执行 SQL 命令。它工作完美,但在 运行 宁服务器几天之后。它开始 return 一个空数组!!!当我重新启动服务器时,它又恢复了工作,但几天后仍然崩溃。
这是错误(空数组错误):
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"
}
更新1
这是连接码:
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 Error: Connection lost The server closed the connection