在 Rails 中,当前线程被大量用于存储全局变量(我知道,全局变量是邪恶的,但它们有时是必要的)。
Thread.current[:authlogic_scope] = scope
以下是它使用的一些地方:
问题是,你能在 Node.js 中做类似的事情吗?具体来说,在一个快递应用程序中。
保持对当前请求(或当前线程)的引用的最佳方法是什么?
在 express 中,您将回调与请求/响应对象一起使用,以避免必须设置全局变量,这是有道理的:
var express = require('express');
var app = express.createServer();
app.get('/', function(request, response) {
response.send('Hello World');
});
这个问题是关于构建用于缓存数据库记录的“身份映射”(范围为当前 HTTP 请求/当前用户)。在 Rails 中,他们可以通过保持身份映射范围为 来做到这一点Thread.current
,因为一切都是同步的。有没有办法在 Node.js 中做到这一点?
一种方法是将request
周围传递给每个函数。对于我的特殊情况,这太复杂了,如果可能的话,我想避免这种情况。
另一种方法是重新定义您将在自定义 javascript 函数中使用的所有变量,类似于您查看模板的方式(使用模板定义感觉像全局变量的变量)。但是对于我的特殊情况,这将比帮助更令人困惑。
第三种方法是将其设置为仅当前 HTTP 请求或当前线程可访问的某个全局变量。这在 Node.js 中可行吗?如果不是,还有什么其他方法可以完成同样的事情?
基本上,我希望能够做到
App.User.where({createdAt: {'>=': _(2).days().ago()}}).all()
并让它在内部检查一些process.CURRENT_REQUEST
范围为当前请求的node.js,App.User
查询可以在其中存储它的结果(并且任何其他模型都可以存储它们的结果,因此如果再次请求它们,它不会命中数据库)。我还希望能够currentUser
像 Authlogic 一样进行传递,因此每当创建记录时,例如,该createdById
字段将被设置为process.CURRENT_REQUEST.currentUser
自动(内部)。