【问题标题】:CommonJS Modules - Exporting a function that returns a function with argumentsCommonJS 模块 - 导出一个函数,该函数返回一个带参数的函数
【发布时间】:2015-05-06 02:40:55
【问题描述】:

在这个rendr - sessions 示例中,有一个快速中间件模块...

module.exports = function incrementCounter() {
  return function incrementCounter(req, res, next) {
    var app = req.rendrApp
      , count = app.get('session').count || 0;
    req.updateSession('count', count + 1);
    next();
  };
};

你不能用下面的方法达到同样的效果吗?

module.exports = function incrementCounter(req, res, next) {
  var app = req.rendrAp
  , count = app.get('session').count || 0;
  req.updateSession('count', count + 1);
  next();
};

我的问题是,为什么要导出一个返回带参数的函数的函数?前者有什么我不知道的好处吗?

【问题讨论】:

    标签: javascript node.js commonjs rendr


    【解决方案1】:

    rendr 使用 Express 风格的中间件。

    按照惯例,Express 中的第三方中间件不作为实际的中间件提供。相反,它们作为基于选项对象参数创建中间件的函数提供。

    但是,由于这里没有提供选项,所以省略了。

    但是,为了遵循周围库的约定,它需要是一个返回中间件函数的工厂函数。所以这就是为什么它在这里被包裹起来。

    【讨论】:

    • 那么在这个特定的中间件中,除非怀疑它进化到需要options对象,否则后者就足够了吗?
    • 您还要确保不要将中间件称为app.use(foo());,而是称为app.use(foo);
    猜你喜欢
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2021-12-18
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多