【发布时间】:2013-05-28 01:09:30
【问题描述】:
我正在构建一个服务,该服务分散在必要时需要的多个模块中。 我需要从我所有模块中的路由器访问“请求”变量。
我目前的解决方案(通常在其他线程中建议用于传递变量)是将其传递给每个所需的模块:
var a_module = require('./a_module')(req);
并将每个模块导出为函数:
module.exports = function(req) { ... }
但这很冗长,并且必须将我的模块导出为函数,并且只能在导出函数的范围内访问此变量。理想情况下,我希望能够访问整个所需模块中的变量。
还有其他我想念的优雅方式吗?就像在整个应用程序中将 req 变量声明为全局变量一样?
【问题讨论】:
-
你使用的是 Express 还是普通的 NodeJS?
-
Node 在同一个进程中异步处理多个请求,这与 PHP 不同。如果您将
req设置为全局变量,并同时处理多个请求,那么req会被破坏,所以我认为您不应该使用全局变量,除非它们是常量和通用的。 -
好的,谢谢。另一个问题:似乎我不能从函数内部要求我的模块 - 这里是 express 的 get() 函数。我分配给它的变量只是未定义的。但是,如果我在函数之外需要它,它就可以工作。有什么我做错了吗? (对不起,如果我遗漏了一个明显的观点,我刚刚开始使用节点)
-
如果你为一个请求加载一个模块,你想在处理完请求后卸载它吗?除非你有这么多的模块,否则你会因为加载所有模块而耗尽内存,我真的认为最好在服务器启动时加载它们并保留它们。 Node 这么快的原因之一是它不会为每个请求从头开始重新启动;对特定请求不是唯一的工作只执行一次。我试图整理出一个好的答案,但我认为当前的系统已经做到了最好,至少就我的技能而言。
-
如果您遇到此类问题,我会问您是否将代码碎片化得太远,可能需要再次查看您的设计。模块在节点中创建命名空间,如果您希望打破或规避该机制,那么感觉是时候审查和重构了。
标签: node.js