Javascript 如何在module.exports中共享作用域
在handler.js内部,我已经导出了2个函数。一个用于初始化,另一个用于句柄。根据应用程序设置初始化用于加载动态处理程序的函数。我在module.exports函数外部共享了变量var处理程序 handler=新Handlerapp;创建的新实例将分配给共享变量var处理程序。然后在handle函数内部共享变量var handler。使用 在web请求时动态地要求一个文件不是个好主意。所以初始化在应用程序启动时创建和调用的方法 让我知道删除共享变量“handler”的建议Javascript 如何在module.exports中共享作用域,javascript,node.js,express,Javascript,Node.js,Express,在handler.js内部,我已经导出了2个函数。一个用于初始化,另一个用于句柄。根据应用程序设置初始化用于加载动态处理程序的函数。我在module.exports函数外部共享了变量var处理程序 handler=新Handlerapp;创建的新实例将分配给共享变量var处理程序。然后在handle函数内部共享变量var handler。使用 在web请求时动态地要求一个文件不是个好主意。所以初始化在应用程序启动时创建和调用的方法 让我知道删除共享变量“handler”的建议 var handl
var handler;
module.exports = {
initialize : function (app){
var Handler = require(path.resolve(app.basedir, app.settings.handler));
handler = new Handler(app);
},
handle : function handle(ctx) {
var urlToHandle = ctx.url;
return handler.resolveURL(ctx)
.then(function (json) {
ctx.layoutJSON = json;
return ctx;
})
.catch(function (e) {
throw e;
});
}
};
不确定我是否正确,但如果您只调用一次初始化,您可以执行类似操作:
var app = require('path-to-a-file-which-return-app');
var Handler = require(path.resolve(app.basedir, app.settings.handler));
var handler = new Handler(app);
module.exports = {
handle : function handle(ctx) {
var urlToHandle = ctx.url;
return handler.resolveURL(ctx)
.then(function (json) {
ctx.layoutJSON = json;
return ctx;
})
.catch(function (e) {
throw e;
});
}
};
现在require将只被调用一次,因为节点将为您缓存它。我不确定是否得到它,为什么您需要删除处理程序,中间件被包装在IIFE中并由节点缓存?