我在Node.js中有一个API .get调用,用于检索特定用户的所有消息。
.get(function(req, res) {
console.log(req.session.username);
Models.Message.find( { "to.username": req.session.username } ).exec(function (err, messages) {
if (err)
res.send(err);
res.json(messages);
});
这些消息通过res.json(消息)传递;通过AJAX到手柄模板脚本。
function allTheDocs(resJSON) {
var templateSource = $("#messagesTemplate").html();
var template = Handlebars.compile(templateSource);
var messagesHTML = template({messages: resJSON});
$('#messages').html(messagesHTML);
}
在脚本中我想调用custom comparison helper,这样如果一个字段:MongoDB数据的值=== node.js中的session / local变量 - >模板化的HTML然后呈现。
Handlebars.registerHelper('ifEqual', function(v1, v2, options) {
if (v1 === v2) {
return options.fn(this);
}
return options.inverse(this);
});
我如何发送快速会话变量(req.session.username)或本地变量(res.locals.username)以及res.json(消息),然后专门模拟会话的未读消息用户?
{{#each messages}}
{{#ifEqual to.username req.session.username}}
{{#if read.marked}
<div class="unreadMessages">{{../message}}</div>
{{else}
<div class="readMessages">{{../message}}</div>
{{/if}}
{{/if}}
{{/each}}
消息在每个消息中的嵌入式阵列MessageUserSchema中标记为未读,以便考虑发送给任意数量的用户(一对多)的选项。
{
"_id" : ObjectId("53b203c2cc3060000000eadc"),
"message" : "Here's a sample Message",
"to" : [
{
"user" : ObjectId("53aada6f8b10eb0000ec8a90"),
"username" : "username1",
"updated" : ISODate("2014-07-01T05:46:22Z"),
"_id" : ObjectId("53b24b2e35eaa0a4106ca21c"),
"read" : {
"marked" : false
}
}
]
}
答案 0 :(得分:1)
理想情况下,您应该只将一个对象传递到视图中,因此通常将这些对象称为ViewModel
。 Express只接受一个json作为视图模型传递。您可以在那里添加信息:
Models.Message.find( { "to.username": req.session.username } ).exec(function (err, messages) {
if (err)
res.send(err);
res.json({
messages : messages,
sessionUserName: req.session.username
});
});
然后在你的模板中:
{{#each messages.messages}}
messages.sessionUserName
...
{{/each}}