Express JS在将非字段属性返回到客户端之前将非字段属性注入Mongoose模型的正确方法是什么

时间:2014-01-08 16:44:58

标签: express mongoose

使用Mongoose模型方法findOne,我收到一个模型。现在我想在将模型发送到客户端之前自定义该模型,将几个属性扩充到该模型中。

然而,我目前发现的唯一方法是将该模型转换为普通对象并扩充该对象。

我不知道有没有更好的办法呢?

这是我用于这个简单目的的冗长代码:

Topic.find({}).exec(function (err, topics) {
  var i, topic_obj, topic_obj_list;
  topic_obj_list = [];

  if (err) { return next(err); }

  for (i = 0; i < topics.length; i++) {
    topic_obj = topics[i].toObject();

    if (req.user.is_following) {
      topic_obj.is_following = true;
    } else {
      topic_obj.is_following = false;
    }

    topic_obj_list.push(topic_obj);
  }

  return res.json(200, topic_obj_list);
});

P / S:我已经尝试过简单的解决方案,例如:topic [i] .is_following = true,它不起作用。

1 个答案:

答案 0 :(得分:3)

您可以将其缩短为以下内容:

Topic.find({}).exec(function (err, topics) {
  if (err) { return next(err); }

  return res.json(topics.map(function(topic) {
    return topic.set(
      'is_following',
      req.user.is_following ? true : false,
      { strict : false }
    );
  }));
});

说明:

  • topics.maptopics数组的每个项目上运行一个函数;从函数返回的值最终在map;
  • 返回的结果中
  • 使用topic.set(FIELD, VALUE, [{ strict : false }]),您可以添加/覆盖Mongoose文档的字段;当strictfalse时,该字段不必存在于架构中;