0

私が得たこの問題について助けが必要です。ユーザー名またはパスワードがデータベースにない場合にノードをクラッシュさせるログインスクリプトがあります。ここにコードがあります。

/* 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.Sequence.end(../node-のQuery.exports.login [as _callback](../node-project01/routes/login.js:18:19)
未定義のプロパティ'name'を読み取ることができませんproject01 / node_modules / mysql / lib / protocol / sequences / Sequence.js:66:24)
at Query._handleFinalResultPacket(../node-project01/node_modules/mysql/lib/protocol/sequences/Query.js:138:8)
Query.EofPacket(../node-project01/node_modules/mysql/lib/protocol/sequences/Query.js:122:8)
at Protocol._parsePacket(../node -project01/node_modules/mysql/lib/protocol/ Protocol.js:165:24)
at Parser.write(../node-project01/node_modules/mysql/lib/protocol/Parser.js:60:12)
at Protocol.write(../node-project01/node_modules/ mysql / lib / protocol / Protocol.js:32:16)
Socket.ondata(stream.js:38:26)
、Socket.EventEmitter.emit(events.js:96:17)
、TCP.onread(net.js:396:14)

これを修正する方法について何かアイデアはありますか?

4

1 に答える 1

1

さて、あなたの質問が12月からのものであることを考えると、あなたはすでに問題を解決していると思います。ただし、問題はおそらくクエリに結果がないためであり、「rows[0]」は未定義です。'rows'変数を使用する前に、次のような結果があるかどうかを常にテストする必要があります。

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

よろしく、

于 2013-03-03T20:17:57.423 に答える