我正在与我的同事使用Express.js和Mongoose开发一个 REST API 。
对于某些 Mongoose Model
methods
,statics
我们需要将Express.js
Request
对象作为添加的上下文信息源,例如当前正在执行请求的经过身份验证的用户。
我们目前所做的是通过原型化函数将调用的自定义属性附加到a的context
上下文Model
中。this
Mongoose
Model
问题是我们遇到了一个令人讨厌的错误,这让我们意识到,虽然在实例Model.methods
上调用了, 却可以正常工作。Model
对于在“类”Model.statics
上被调用的人,其范围由整个应用程序共享,这意味着如果您有并发请求,如果您在请求处理中有任何异步行为,它们将覆盖彼此的值.Model
singleton
this.context
现在我的问题如下:
Express.js
在和函数Mongoose
中保持和访问上下文request
的最佳实践是什么?Model.statics
Model.methods
当然,有一些可能的黑客来模拟遏制,例如:
Function.bind()
Model
添加请求上下文的每个函数。-> 这意味着如果在
Model.statics.a()
内部调用Model.statics.b()
, 函数b()
不会有this.context
.使用对象
with() {}
上的语句并调用该范围内的request
每个函数。Model
-> 这会很脏而且很慢。
vm
使用标准 Node.js 模块创建具有单独范围的容器。-> 与 (2) 相同,性能会受到很大影响。
有任何想法吗 ?先感谢您 !