【问题标题】:How can I access express request object in Mongoose virtual get func如何在 Mongoose virtual get func 中访问快速请求对象
【发布时间】:2018-09-15 21:49:52
【问题描述】:

我试图找到这个,但我找不到可以回答我疑问的解决方案。

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

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

我想要实现的是用用户对每个帖子的权限列表填充字符串数组类型的权限属性。这个逻辑是通过所有者用户 id 派生的,该用户 id 存储在 post mongo 数据库中,并且用户 id 存在于 express 的请求对象中,该用户 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,所以我不想介绍任何类型的会话对象。

干杯

【问题讨论】:

  • 有人可以帮我吗?

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


【解决方案1】:

我觉得你应该看看这个模块https://github.com/othiym23/node-continuation-local-storage

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

【讨论】:

  • 这不适用于不同的文件。我已经在 app.js 中初始化它,在控制器中设置值并在模型中获取值。在模型中它总是“未定义”
猜你喜欢
  • 2016-12-25
  • 2021-08-03
  • 2015-03-18
  • 2015-08-23
  • 2011-09-02
  • 1970-01-01
  • 2020-07-01
  • 2016-09-17
  • 1970-01-01
相关资源
最近更新 更多