KolyaniuS
@KolyaniuS
безнадежный оптимист

Как вернуть результат callback-функции select-запроса на felixge/node-mysql?

Добрый день!
Не могу понять как вернуть результат выполнения SELECT-а из callback-функции query.
Суть в следующем: есть некий сервер на node.js который принимает POST-запросы от клиента и в соответствии с этим производит те или иные действия с базой данных mysql. С записью и апдейтом в базу разобрался - все работает. Но не могу понять как вернуть выборку по селекту из таблицы в базе. Для наглядности приведу часть кода:
function accept(req, res) {
    if (req.method == "POST") {
        var requestBody = '';
        req.on('data', function(data) {
        requestBody += data;
        });
        req.on('end', function() {
            var formData = qs.parse(requestBody);
            var login = formData.login;
//Далее нужно проверить существование записи в БД 
//и если такой нет то сделать новую запись в БД, иначе обновить существующую
            selectDB(login);
           // Здесь нужно получить результат чтобы запустить условие
            if (selectDB(login)) ...  updateDB(login,score);           
            else insertDB(login,score);

                ....
});

// И есть некая функия selectDB
function selectDB(param1) {

    var connection = mysql.createConnection({
        host     : '',
        user     : '',
        password : '',
        database : ''
    });
        connection.connect();
        connection.query(
            {sql: 'SELECT * from users where login = ?',
             values: [param1]
            },
            function(err, results, fields) {
                if (err) return err;
// console.log(results) - возвращает результат выполения запроса в БД, но return results - возвращает undefined
                return results;
            }
        );
        connection.end();
}

Как мне в function accept получить значение function selectDB?
Извиняюсь за глупый вопрос - с javascript пока на вы и многих вещей не понимаю. Полагаю connection.query вернет некий объект, но я смотрел его вывод в консоли node.js и не обнаружил в нем метода, который возвращает результат callback-функции.
  • Вопрос задан
  • 3264 просмотра
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Добавьте параметр в selectDB(param1, callback) и вызывайте его вместо return results. Потом в этот самый новый параметр передавайте функцию, которая должна получать результат и она будет его получать в виде параметра. Рекомендуется делать не просто callback(results), а пробрасывать ошибку наверх, чтобы ее можно было обработать: callback(err, results). Тогда вызов будет выглядеть:
selectDB(param1, function(err, result) { /* тут будут доступны выбранные данные в result */ });

Кстати, может вот такая библиотека упростит Вам жизнь: https://www.npmjs.com/package/mysql-utilities
Статья по ней: habrahabr.ru/post/198738
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы