Mysql с экспресс-запросом возвращает ноль - PullRequest
0 голосов
/ 16 ноября 2018

Я использую экспресс на стороне сервера.Вот код:

// router
const database = require('../services/database-service');

router.get('/allreviews', function (req, res, next) {
    let reviewsSql =
        'select r.reviewId, r.username, r.time, r.reviewText, r.visit, ri.fileName ' +
        'from (select min(reviewImgId) as imgId, reviewId ' +
        'from ReviewImgs ' +
        'group by reviewId) img, Reviews r, ReviewImgs ri ' +
        'where img.imgId=ri.reviewImgId and ri.reviewId=r.reviewId;';

    database.query(reviewsSql, function (result) {
        console.log(result);   // NULL
        res.send(result);
    });
});

// database-service.js
const mysql=require('mysql');

module.exports = {
    query: function (sql, data, fn) {
        const connection = mysql.createConnection({
            host     : '127.0.0.1',
            user     : 'root',
            password : 'xxxxxxxxx',
            database : 'Movie',
            port:'3306'
        });

        connection.connect();

        connection.query(sql, data, function (error, result) {
            if (error){
                console.log(error);
                return;
            }

            fn(result);
        });

        connection.end();
    }
};

Проблема в том, что результат запроса всегда равен нулю.Тем не менее, я выполняю код запроса sql в командной строке mysql, и в результате получается набор, содержащий 3 строки, и это именно то, что я хочу.Так что же происходит?

Ответы [ 2 ]

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

классические обратные вызовы для асинхронных библиотек обычно имеют вид function(err, result), но вы передаете function (result)

JavaScript не заботится о том, как параметры вызываются, обратный вызов получитошибка является первым аргументом.Таким образом, параметр result на самом деле содержит err, потому что это первый аргумент, а значение null означает, что ошибки нет.

Так что просто измените function (result) на function(err, result)

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

Попробуйте сделать это

// database-service.js
const mysql=require('mysql');

const connection = mysql.createConnection({
            host     : '127.0.0.1',
            user     : 'root',
            password : 'xxxxxxxxx',
            database : 'Movie',
            port:'3306'
        });

connection.connect();

module.exports = connection;

// Для выполнения вашего запроса

 database.query(reviewsSql, function (err, result) {
        console.log(result);   // NULL
        res.send(result);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...