【问题标题】:What does double parentheses mean in a require要求中的双括号是什么意思
【发布时间】:2019-02-02 07:59:43
【问题描述】:

我知道这个 require 语句的作用。

var express = require('express');
var app = express();

但有时我会在 require 后面看到两个括号。

var routes = require('./routes')(app);

Q)这是什么意思,它是如何工作的?

【问题讨论】:

  • This 可能会有所帮助

标签: node.js express


【解决方案1】:

这是一种模式,其中您需要的模块的module.exports 被设置为一个函数。 Requiring 那个模块返回一个函数,require 后面的括号用一个参数计算这个函数。

在上面的示例中,您的 ./routes/index.js 文件如下所示:

module.exports = function(app) {
  app.get('/', function(req, res) {

  });
  // ...
};

这种模式通常用于将变量传递给模块,如上面的app 变量所示。

【讨论】:

  • Aaah.... 所以这意味着:var express = require('express'); var app = express(); 可以这样写:var app = require('express')(); ...即使这并不意味着它 应该 =)
【解决方案2】:

好吧,require 是 Node.js 提供的一个函数,它基本上为您加载一个模块,并返回您在加载的模块中公开的任何内容。

如果您在给定模块中公开(通过使用 module.exports)是一个函数,那么这就是需要返回的内容。例如。

//moduleX.js
module.exports = function(){
  return "Helo World";
}

然后如果你需要它,你会得到一个函数返回

var f = require('./moduleX');
console.log(f()); //hello world

当然,您可以在需要时直接调用该函数。

var greet = require('./moduleX')();
console.log(greet);

【讨论】:

    【解决方案3】:

    这意味着在这之后,有一个使用module.exports导出的函数:

    module.exports = function(app) {
       app.get("/", function(req, res){});
    }
    

    另见http://www.choskim.me/understanding-module-exports-and-exports-in-node-js/

    旁注:

    您可以动态创建函数:

    A.js

    module.exports = function(data) {
       return function(req, res, next) {
            // Do something with data
            next();
    
    }
    

    main.js

    ...
    app.use(require("A")(data));
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多