我正在使用restify在节点中编写一个基本的REST API框架。为了支持这一点,我有几个我导出和需要的辅助对象。
我无法理解如何以每个传入HTTP请求使用辅助对象的唯一实例的方式来要求这些对象。实际上,我需要()GET请求范围内的模块,但我觉得这不是最好的做法。例如:
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";
请求范围内的文件是否会产生任何负面影响?我想在处理高频流量时,为每个呼叫请求文件并不理想。
在通过快递或解析来考虑多个传入的HTTP请求时,要求/导出模块的最佳做法是什么?我应该确保我写的帮助者不处理这些边缘情况吗?
答案 0 :(得分:2)
好的,首先,重温一下需要做什么就好了。 Fred K. Schott非常清楚地描述了thenodeway.io。基本上,需要函数:
因此,在您需要一个文件开头之后,再没有需要额外的开销。
其次,您的问题是一般的JavaScript问题。要实现您想要实现的目标,请更改文件以执行此操作:
helper.js
var helper = function(){
this.foo = new Date().getTime();
this.fileName = random(10) + ".json";
return this;
};
helper.prototype.test = function(){
return new Date().getTime();
};
module.exports = helper;
main.js
var Helper = require("./helper");
app.get("/", function(req, res){
var helper = new Helper();
helper.test()
});
这样,帮助对每个请求始终是唯一的。
因此,在分割代码时,请经常尝试使用模块。它们只会增加初始开销,并且不会对繁重的流量产生固有的影响。