Возвращение неопределенного от mySQL - PullRequest
0 голосов
/ 08 января 2020

Я знаю, что база данных соединяется с кодом, поскольку, когда i console.log(res) с кодом ниже, она возвращает правильные данные,

const orm={
    selectAll(){
        connection.query('SELECT * FROM burgers', (err,res) => {
            if (err) throw err;
            console.log(res)
            return res;
        });
    },

Тем не менее, когда i console.log(burgers) из этой функции в приведенный ниже код возвращает неопределенный

app.get(`/`, function (req, res) {
    const burgers = orm.selectAll();
    console.log(burgers)

    res.render(`index`, burgers);
});

Я понимаю, что это может быть очень простой ответ, но лично я просто не могу разобраться, любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Ваш метод selectAll не будет возвращать никакого значения.

запрос получает лямбда-функцию обратного вызова в качестве второго параметра И запрос является асинхронным

Один из способов - вернуть Promise из selectAll

const orm = {
  selectAll(callback) {
    return new Promise((resolve, reject) => {
      connection.query('SELECT * FROM burgers', (err, res) => {
        if (err) {
          reject(err);
        } else {
          resolve(res)
        }
      })
    })
  },

Чем вы можете получить свой результат:

app.get(`/`, function (req, res) {
  orm.selectAll().then( burgers => {
    console.log(burgers)
    res.render(`index`, burgers);
  });
});
0 голосов
/ 08 января 2020

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

function selectAll() {
  return new Promise((reoslve, reject) => {
    connection.query("SELECT * FROM burgers", (err, res) => {
      if (err) {
        reject(err);
      }
      reoslve(res);
    });
  });
}

Затем вы можете использовать его следующим образом

app.get(`/`, function async (req, res) {
    const burgers = await selectAll();
    console.log(burgers)

    res.render(`index`, burgers);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...