我试图找到这个,但我找不到能够回答我怀疑的解决方案。
我有一个虚拟的猫鼬属性定义为:
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,因此我不想介绍任何类型的会话对象。
干杯
答案 0 :(得分:0)
我认为你应该看一下这个模块https://github.com/othiym23/node-continuation-local-storage
它允许在请求中间件中设置上下文变量,然后在从它调用的所有函数中使用它们,例如猫鼬模型处理程序。