我可以从带有参数的小胡子模板内部调用函数吗?

时间:2019-01-10 19:22:55

标签: node.js mongoose mustache

我有一个在user_helper.js中定义的函数,该函数通常返回值。

当我从 mustache 模板调用getUserInfo()(在user_helper.js中)时,通常会返回一个字符串。但是当我想要猫鼬查询的结果时,它返回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 :(得分:0)

您的功能有很多问题。

第一个是query函数中不存在getUserInfo变量。因此User.findOne()无法执行。

第二个错误是User.findOne()方法是异步的,因此您将无法按预期返回值。

您应该在index.js中修改您的 / home 路由以检索用户:

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}}