我正在使用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.name
,user.role
和user.ref
工作正常。我无法打印消息。
以下是user.messages
中应包含的内容。
[ { from: '+0000000000',
body: 'test',
ref: 123,
_id: 5342bf04ce29220200a3cb8e,
__v: 0 },
{ from: '+0000000000',
body: 'second message',
ref: 123,
_id: 5342cb4604f6f2020068a9b8,
__v: 0 } ]
答案 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则省略它们。