MySQL Node JS: выбрать результаты запроса для массива и использовать этот массив в других функциях - PullRequest
0 голосов
/ 09 февраля 2020

Мне нужно получить информацию о пользователе и использовать ее во всех файлах, но когда я сохраняю ее в массив или массив сеансов - он показывает неопределенный.

connection.query('SELECT * FROM users WHERE username = ? OR email = ? AND password = ?', [login, login, password], function (err, results) {
            if (results.length > 0) {
                req.session.username = results[0].username;
                req.session.email = results[0].email;
                req.session.password = results[0].password;
                req.session.premium = results[0].premium;
                req.session.created_at = results[0].created_at;
            } else {
                console.log("Error!");
            }
        });

Массивы и сеансы всегда неопределены ...

1 Ответ

0 голосов
/ 09 февраля 2020

req - это переменная функции / publi c переменная, которую я предполагаю. connection.query является асинхронным. Обратные вызовы всегда асинхронны, и каждый REST API имеет вид.

Асинхронный в основном позволяет функциям обратного вызова функций выполняться вместе со следующими строками кода.

Причина, по которой req не возвращает никакого значения это потому, что значение req сначала выводится на печать, прежде чем оно фактически присваивается в функции. Если вы хотите добавить все в req, выполните команду:

someFunctionYouHaveCreated: (req,res,type) => {

    connection.query('SELECT * FROM users WHERE username = ? OR email = ? AND password = ?', [login, login, password], function (err, results) {

        if (results.length > 0) {
            req.session.username = results[0].username;
            req.session.email = results[0].email;
            req.session.password = results[0].password;
            req.session.premium = results[0].premium;
            req.session.created_at = results[0].created_at;
        } else {
            console.log("Error!");
        }

        DoSomething(req);
    });
}

DoSomething: (req) => {
  //Do something
}

Или создайте обещание и запустите функцию на основе обещания. Используйте promise.all для присвоения значения: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all, но я не думаю, что вам нужен такой уровень сложности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...