如何在Mongoose虚拟get func中访问快速请求对象

时间:2018-04-05 23:36:07

标签: javascript node.js mongodb mongoose mongoose-schema

我试图找到这个,但我找不到能够回答我怀疑的解决方案。

我有一个虚拟的猫鼬属性定义为:

  postSchema.virtual('permissions').get() => {
  });

我想要实现的是填充字符串数组类型的此权限属性,以及用户在每个帖子上拥有的权限列表。该逻辑是通过所有者用户id派生的,该用户id存储在post mongo数据库中,而用户id存在于来自请求者的请求快递对象中。

但是,我意识到虚拟方法无法使用请求对象:

postSchema.virtual('permissions').get((req) => {
    // req is null.
  });

现在,我确实有一个解决方案来解决这个问题,方法是将查找结果设置为服务级别。

 app.get('/api/posts', (req, res) => {
    PostModel.find({}, '-fbEmailAddress', { sort: { created_at: -1 } }).lean().exec(function (err, posts) {
        posts.array.forEach(element => {
            element.permissions = // write your permission logic here
        });
        res.send(posts);
    });
});

但是,如果我这样做,它将不会停止呼叫。我也定义过的任何虚拟属性。我没有机会操纵名字,姓氏到全名等。人

您是否有任何建议以最好的方式解决此问题,以便我可以访问请求对象中的当前用户ID?

请注意,它是一个API,因此我不想介绍任何类型的会话对象。

干杯

1 个答案:

答案 0 :(得分:0)

我认为你应该看一下这个模块https://github.com/othiym23/node-continuation-local-storage

它允许在请求中间件中设置上下文变量,然后在从它调用的所有函数中使用它们,例如猫鼬模型处理程序。