【发布时间】:2012-07-23 21:56:43
【问题描述】:
在 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()
并让它在内部检查一些 node.js process.CURRENT_REQUEST 范围为当前请求,App.User 查询可以存储它的结果(并且任何其他模型都可以存储它们的结果,所以如果再次请求它们,它不会'不要打数据库)。我还希望能够像 Authlogic 一样传递 currentUser,因此每当创建记录时,例如,createdById 字段将自动(内部)设置为 process.CURRENT_REQUEST.currentUser。
【问题讨论】:
标签: javascript ruby-on-rails node.js global-variables process