【发布时间】:2015-03-05 07:20:50
【问题描述】:
我正在使用 restify 在 node.js 中编写一个基本的 REST API 框架。为了支持这一点,我导出并需要几个辅助对象。
我无法理解如何要求这些对象,以使每个传入的 HTTP 请求都使用帮助器对象的唯一实例。事实上,我在 GET 请求范围内 require() 模块,但我觉得这不是最佳实践。例如:
helper.js
var helper = function(){
this.foo = new Date().getTime();
return this;
};
helper.prototype.test = function(){
return new Date().getTime();
};
module.exports = new helper();
main.js
app.get("/", function(req, res){
var helper = require("./helper");
helper.test();
});
helper.test() 有效:每个传入的请求都有它自己的帮助程序范围实例。如果我需要请求范围之外的帮助文件,则帮助对象中的数据在请求之间共享,因为节点缓存所需文件的对象的方式。
但是,在这种情况下,每次调用的 helper.foo 都是相同的,可能是因为 require() 调用通过“new”关键字接收 1 个实例。
当我有一个使用随机字符串命名文件的辅助函数时遇到了这个问题,但是因为我已经像(下面)一样声明它,所以所有文件都被命名为相同。
helper.prototype.fileName = random(10) + ".json";
在请求范围内要求文件是否会产生负面影响?我想在处理高频流量时,为每个呼叫请求文件并不理想。
在考虑通过 express 或 restify 传入多个 HTTP 请求时,要求/导出模块的最佳做法是什么?我是否应该确保我正在编写的助手不会处理这些边缘情况?
【问题讨论】:
标签: node.js express module scope amd