Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在module.exports中共享作用域_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何在module.exports中共享作用域

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

在handler.js内部,我已经导出了2个函数。一个用于初始化,另一个用于句柄。根据应用程序设置初始化用于加载动态处理程序的函数。我在module.exports函数外部共享了变量var处理程序

handler=新Handlerapp;创建的新实例将分配给共享变量var处理程序。然后在handle函数内部共享变量var handler。使用

在web请求时动态地要求一个文件不是个好主意。所以初始化在应用程序启动时创建和调用的方法

让我知道删除共享变量“handler”的建议

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中并由节点缓存?