Как я могу использовать обратный вызов для извлечения данных из mysql с помощью node.js и ejs? - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно получить foo из запроса ниже:

exports.get = function(id, cb) {
    sql = 'SELECT `sidebar`, `test` FROM users WHERE `id` = "' + id + '"';
    con.query(sql, function(err, foo) {
      if (err) { return cb(err) }
      else { return cb(foo) };
    });
}

Затем отобразить foo в моем app.js следующим образом:

app.get('/dashboard', ensureLoggedIn('/login'),
  function(req, res) {
    const id = req.session.passport.user;
    const foo = db.defaults.set(id) //db.defaults.set calls the query
    console.log(foo); //prints undefined
    res.render('dashboard', { foo:foo });
});

Это был мой последнийпопытка:

app.get('/dashboard', ensureLoggedIn('/login'),
  function(req, res, next) {
    const id = req.session.passport.user;
    db.defaults.get(id, function(err, foo) {
      if (err) return next(err);
      res.render('dashboard', {foo:foo});
      //also tried:
      //return res.render('dashboard', {foo:foo});
    });

Приведенная выше попытка не отображает страницу вообще.HTML загружается как:

[object object]

Чего мне не хватает?

1 Ответ

0 голосов
/ 04 февраля 2019

Вы пытаетесь отобразить шаблон на стороне сервера асинхронно (после извлечения данных), и вы не можете этого сделать.

Что вы можете сделать - это синхронно отправить шаблон клиенту, а затем выставитьконечная точка для извлечения этих данных и соответствующего изменения страницы (на клиенте).

app.get('/dashboard', ensureLoggedIn('/login'), function(req, res) {
  res.render('dashboard');
});

app.get('/fetchdata', function (req, res, next) {
  const id = req.session.passport.user;
    db.defaults.get(id, function(err, foo) {
      if (err) return next(err);
      res.send(foo);
    });
})
...