提问者:小点点

Node. js在MySQL查询上崩溃


我需要帮助来解决我遇到的这个问题。如果用户名或密码不在数据库中,我有会崩溃节点的登录脚本,这里是代码:

/* Login */
exports.login = function(req, res){
    var post = req.body;
    var mysql = require('mysql');
    var db = mysql.createConnection({
      host      : 'localhost',
      user      : 'root',
      password  : 'root',
      database  : 'node01',
    });
    var selectStmt = 'SELECT * FROM users WHERE name = "' + post.user +'"';
    db.connect();

    db.query(selectStmt, function(err, rows, fields) {
      if(err) throw err;
      else if(rows[0].name == post.user && rows[0].password == post.password){
        req.session.auth_id = rows[0].id;
        req.session.user = rows[0].name;
        res.redirect('/adminindex');
      }
      else res.redirect('/admin');
    });

    db.end();
};

和我得到的错误

TypeError:无法读取Query. exports.login[as_callback](…/node-project ect01/路由/login.js:18:19)未定义的属性'name'
在Query.Sequence.end(…/node-project ect01/node_modules/mysql/lib/协议/序列/序列.js:66:24)
在Query._handleFinalResultPacket(…/node-project ect01/node_modules/mysql/lib/协议/序列/Query.js:138:8)
在Query.EofPack(…/node-project ect01/node_modules/mysql/lib/协议/序列/Query.js:122:8)
在Protocol._parsePacket(…/node-project ect01/node_modules/mysql/lib/协议/协议.js:165:24)
在Parser.write(…/node-project ect01/node_modules/mysql/Socket. EventEmitter.emit(event.js:96:17)
在TCP.onread(net.js:396:14)

关于如何解决这个问题有什么想法吗?


共1个答案

匿名用户

好吧,考虑到你的问题是从12月开始的,我想你已经解决了这个问题。然而,你的问题可能是因为你的查询没有结果,那么'row[0]'是未定义的。在使用'rows'变量之前,你总是应该测试是否有任何结果,比如:

if (rows.length > 0) {
  // your code here
}

问候,