【问题标题】:How to use require inside global and local function如何在全局和局部函数中使用 require
【发布时间】:2015-07-11 06:16:41
【问题描述】:

我正在使用节点 JS 应用程序,我已经使用模块创建了新的 js 文件,在这个模块中我只导出一个函数,在这个模块中可以说我还有两个函数供 仅供内部使用并且不应该暴露在外面,每个函数都使用不同的 require 模块,如下所示:

module.exports = function (app, express) {

    var bodyParser = require('body-parser'),
        url = require('url'),
        http = require('http');

.....
};


function prRequest(req, res) {

    httpProxy = require('http-proxy');
....

}

function postRequest(req, res) {

 url = require('url');
....

}

我的问题来自最佳实践,我应该将需求放在哪里(对于 url http 等)

1.在每个需要它的功能中?在我的情况下是内部和外部

2.全局在每个函数都可以使用的文件中?

3.如果两个不行,我应该把我应该在两个函数中使用的需要 URL 放在哪里?最好放在两个函数或全局中,否则没关系

【问题讨论】:

    标签: javascript node.js require


    【解决方案1】:

    模块应该暴露在函数之外,因为每次调用函数时调用 require 都会增加额外的开销。比较:

    const url = require('url');
    const start = Date.now();
    
    for (let i = 0; i < 10000000; i++) {
        url.parse('http://stockexchange.com');
    }
    
    console.log(Date.now() - start);
    

    到:

    const start = Date.now();
    
    for (let i = 0; i < 10000000; i++) {
        require('url').parse('http://stackexchange.com');
    }
    
    console.log(Date.now() - start);
    

    在我的机器上,前者需要 95.641 秒才能完成执行,而后者需要 125.094 秒。即使您导出使用所需模块的函数,导入时它仍然可以访问其文件中的其他变量。所以我会在每个需要它们的文件中本地声明模块,而不是全局声明。

    编辑:这意味着你想要这样做:

    var bodyParser = require('body-parser'),
        url = require('url'),
        http = require('http');
    
    module.exports = function (app, express) {
        ....
    };
    
    var httpProxy = require('http-proxy');
    
    function prRequest(req, res) {
        ...
    }
    

    【讨论】:

    • 感谢投票!所以只是为了验证你所说的。你会在我的帖子中保留类似的内容,对于我使用她自己的要求的每个功能。是否正确?2。您如何处理更多功能所需的 url,在此先感谢!
    • 没有。我编辑了我的答案以澄清我的意思。如果您在多个函数中需要 url,那么您可以在我的帖子编辑中的函数之外定义它。
    • 所以澄清一下,需要多个函数的请求应该是全局的,当需要在特定文件中使用时,只应该在这个函数中而不是全局,如果我是请纠正我错了
    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    相关资源
    最近更新 更多