节点,猫鼬,灰尘 - 使用Dust打印查询结果

时间:2014-04-07 16:59:10

标签: node.js mongodb mongoose dust.js kraken.js

我正在使用KrakenJS重建现有项目,以学习如何使用节点构建应用程序。通过跟随this tutorial,我能够理解很多概念。

然而,我仍在努力了解尘埃的作用,我认为我的问题就在那里。我对Rails非常熟悉,所以我理解MVC模型。但是,我不知道Dust如何与堆栈的其余部分一起工作。

在我的用户模型的架构中,我有以下代码:

userSchema.methods.messages = function() {
    var user = this;
    var messages = MessageModel.find({ref: user.ref}, function(err, messages) {
      if(err) {
        console.log(err);
        return err;
      }
      else {
        console.log(messages);
        return messages;
      }
    });
  };

这样可行,因为我可以登录到控制台并获得正确的输出。

我正在尝试使用前端的Dust打印这些messages,但无济于事。

这是我的代码:

You are <strong>{user.name}</strong> and your role is <strong>{user.role}</strong><br />
Your ref number is <strong>{user.ref}</strong>.
{#user.messages}
   {.body} <br /> 
{/user.messages}

user.nameuser.roleuser.ref工作正常。我无法打印消息。

以下是user.messages中应包含的内容。

[ { from: '+0000000000',
    body: 'test',
    ref: 123,
    _id: 5342bf04ce29220200a3cb8e,
    __v: 0 },
  { from: '+0000000000',
    body: 'second message',
    ref: 123,
    _id: 5342cb4604f6f2020068a9b8,
    __v: 0 } ]

2 个答案:

答案 0 :(得分:1)

问题在于

var messages

不会填充实际的消息,它将始终是&#34; undefined&#34;。 由于Node以异步方式工作,因此它不会等待您的查询完成。

要解决此问题,您需要为函数添加回调,如下所示:

userSchema.methods.messages = function(callback) {
  var user = this;
  var messages = MessageModel.find({ref: user.ref}, callback);
}

然后在您的控制器/路线中执行以下操作:

server.get('/', function(req, res, next) {
  User.messages(function(err, messages) {
    if(err) return next(err);
    res.render('template', { messages: messages });
  }
}

而不是使用&#34; user.messages&#34;在您的模板中,只需使用&#34;消息&#34;。

答案 1 :(得分:0)

您的_id值不是有效的JS常量。如果我手动调整值看起来像整数,事情就像你期望的那样工作。也许它们需要被解析为JS base 16格式或整数值,或者如果你不需要唯一的记录id则省略它们。