Могу ли я вызвать функцию из шаблонов усов, которая принимает параметры? - PullRequest
0 голосов
/ 10 января 2019

У меня есть функция, определенная в user_helper.js, которая обычно возвращает значение.

Когда я вызываю getUserInfo()user_helper.js) из шаблона усы , обычно возвращается строка. Но когда я хочу получить результаты запроса mongoose, он возвращает NULL и даже не показывает никакой ошибки.

index.js

router.get("/home", (req, res) => {
  Profile.find()
    .then(profile => {
      res.render("index", {
        userID: req.session.userID,
        helper: require("../helpers/user_helper")
      });
    })
    .catch(err => {
      res.status(400).send("Unable to fatch");
    });
});
module.exports = router;

user_helpert.js

var users = {
  getUserInfo: function() {
    return function(userID, render) {
      var query = {_id:userID};
      User.findOne(query, function(error, user) {
      // Inside, return nothing
      if (error) {
      return error;
      } else {
        return user;
       }
     });
      return "Some Text"; //This one's return result
    };
  }
};
module.exports = users;

шаблон усов

{{#helper.userInfo}}{{ userID }}{{/helper.userInfo}}

Должен возвращать информацию о пользователе из базы данных. Может кто-нибудь знает об этом или как-то лучше?

1 Ответ

0 голосов
/ 11 января 2019

В вашей функции много проблем.

Во-первых, переменная query не существует в функции getUserInfo. Так что User.findOne() не может быть выполнено.

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

Вы должны изменить маршрут / home в index.js, чтобы получить пользователя:

router.get("/home", (req, res) => {
  User.findOneById(req.session.userID)
    .then(user => {
      res.render("index", {
        user: user
      });
    })
    .catch(err => {
      res.status(400).send("Unable to fetch");
    });
});

А в вашем шаблоне:

{{user.id}}
...