Node.js 将节点模块导出为唯一实例
我正在使用restify在node中编写一个基本的restapi框架。为了支持这一点,我有几个我导出并需要的助手对象 我很难理解如何以这样的方式要求这些对象:每个传入的HTTP请求都使用helper对象的唯一实例。事实上,我需要()GET请求范围内的模块,但我感觉这不是最佳实践。例如: helper.jsNode.js 将节点模块导出为唯一实例,node.js,express,module,scope,amd,Node.js,Express,Module,Scope,Amd,我正在使用restify在node中编写一个基本的restapi框架。为了支持这一点,我有几个我导出并需要的助手对象 我很难理解如何以这样的方式要求这些对象:每个传入的HTTP请求都使用helper对象的唯一实例。事实上,我需要()GET请求范围内的模块,但我感觉这不是最佳实践。例如: helper.js var helper = function(){ this.foo = new Date().getTime(); return this; }; helper.prototype.t
var helper = function(){
this.foo = new Date().getTime();
return this;
};
helper.prototype.test = function(){
return new Date().getTime();
};
module.exports = new helper();
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
app.get("/", function(req, res){
var helper = require("./helper");
helper.test();
});
var Helper = require("./helper");
app.get("/", function(req, res){
var helper = new Helper();
helper.test()
});
test()工作:每个传入请求都有自己的helper作用域实例。如果我需要请求范围之外的帮助器文件,那么由于节点缓存所需文件的对象的方式,帮助器对象中的数据将在请求之间共享
但是,在本例中,helper.foo对于每个调用都是相同的,可能是因为require()调用通过“new”关键字接收1个实例
当我有一个helper函数,它使用一个随机字符串来命名一个文件时,我遇到了这个问题,但是因为我像下面那样声明了它,所以所有文件的名称都是相同的
helper.prototype.fileName = random(10) + ".json";
在请求范围内需要文件是否会产生任何负面后果?我可以想象,在处理高频流量时,为每个调用请求文件并不理想
通过express或restify考虑多个传入HTTP请求时,需要/导出模块的最佳做法是什么?我是否应该确保我正在编写的帮助程序不处理这些边缘情况?好的,因此首先最好检查一下需要什么。弗雷德·K·肖特(Fred K.Schott)对此描述得非常好。因此,本质上,要求函数:
var helper = function(){
this.foo = new Date().getTime();
return this;
};
helper.prototype.test = function(){
return new Date().getTime();
};
module.exports = new helper();
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
app.get("/", function(req, res){
var helper = require("./helper");
helper.test();
});
var Helper = require("./helper");
app.get("/", function(req, res){
var helper = new Helper();
helper.test()
});
这样,对于每个请求,helper总是唯一的
因此,在分割代码时,尽量经常使用模块。它们只会增加初始开销,并且不会在高流量下固有地影响性能。Wow!明亮的真不敢相信我还没试过。你们知道节点来自哪里吗?节点起源于加拉帕戈斯岛渡渡鸟的进化树。这很有道理!这必须是节点继承其群集能力的地方!愚蠢的渡渡鸟宝宝!