Не получить объект возврата из запроса MySQL в NodeJS - PullRequest
0 голосов
/ 29 ноября 2018

Я делаю систему регистрации в NodeJS с БД MySQL.Сначала я делаю соединение следующим образом:

const con = mysql.createConnection({
  host     : 'localhost',
  user     : 'dbuser',
  password : 'dbpass',
  database : 'dbname',
  port     : 3306,
  multipleStatements : true
});

Затем, когда я делаю запрос для получения данных о пользователях, я делаю следующий запрос.

var user;
con.query('SELECT * FROM users WHERE email = ?', email, function(err, rows) {
    if (err) throw err;
    else {
       user = rows[0];
    }
});

Но когда я наконец сравниваю любой изПоля возвращенного пользователя Я получаю сообщение об ошибке:

if (tools.hashPassword(password) == user.hash) {
    // Do stuff
}

Ошибка: TypeError: Cannot read property 'hash' of undefined.Любое предложение?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Дело в том, что вы получаете результат, но он асинхронный.Поэтому во время проверки свойства пользователя hash сам объект еще не загружен.Вы должны поместить свое сравнение в обратный вызов, как это:

con.query('SELECT * FROM users WHERE email = ?', email, function(err, rows) {
  if (err) throw err;
  else {
     if (tools.hashPassword(password) === rows[0].hash) {
        // Do stuff
     }
  }
});

// This stuff happens usually BEFORE the query's callback,
// due to Node.js asynchronous nature
0 голосов
/ 29 ноября 2018
con.query("SELECT * FROM users WHERE email = ?", email, function (err, rows) {
    if (err) {
        throw err;
    } else {
        if (!rows.length) {
            throw new Error("User not found");
        }
        const user = rows[0];
        if (tools.hashPassword(password) == user.hash) {
            // Do stuff
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...