res.send?一个快速会话或局部变量,除了res.json,还有模板?

时间:2014-07-01 05:40:50

标签: node.js templates express handlebars.js

我在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
            }
        }
    ]
}

1 个答案:

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