почему я не могу получить результаты запроса - PullRequest
0 голосов
/ 05 июля 2019

Я разделяю SQL-запрос и файл маршрутизатора на две части, пытаясь применить концепцию MVC.Но почему я могу передать результат запроса?теперь это не работает, консоль выдает «undefine» вместо результатов

//homeapi.js under folder api
var mysql = require('../conf/db');
let getAll = {};
getAll.all = () => {
    var userGetSql = 'SELECT * FROM product';
    mysql.query(userGetSql, (err, results) => {
      if (err) {
        return ;
      }
      return results;
    })
}

let info = getAll.all();
console.log(info)

module.exports = getAll;

//index.js under routers file,  I try to import it, but also failed
var getAll = require('../api/homeapi');
router.get('/product', (req,res,next) => {
  res.json(getAll.all());
});

1 Ответ

1 голос
/ 05 июля 2019

NodeJS работает асинхронно, что означает, что когда вы вызываете res.json(getAll.all());, res.json выполняется до завершения выполнения запроса.

Правильный способ сделать это:
1. Ваша функция getAll должнаполучить обратный вызов извне (как и в случае с функцией mysql)
2. функция маршрутизатора должна передать обратный вызов getAll и передать результат в ответ

getAll.all = (callback) => {
    var userGetSql = 'SELECT * FROM product';
    mysql.query(userGetSql, callback);
}

router.get('/product', (req,res,next) => {
  getAll.all((result, err) => {
    if (err) {
       return res.json('some error message');
    }
    return res.json(result);
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...