理解module.export传递参数

Understanding module.export to pass a parameter

我一直在努力理解,module.export如何用它传递参数。现在我做了一个演示服务器来测试它。

文件 - index.js

var express = require('express');
var check = require('./file');
var app = express();

app.get('/',check.fun1("calling"),(req,res)=>{
    res.send('here i am');
})

app.listen(3000,()=>{
    console.log("Server is up");
})

通过中间件检查,

module.exports = fun1 = name => {
    return function(req, res, next) {
      console.log(name + " from fun1");
      next();
    };
  };

  module.exports = fun2 = name2 => {
    return function(req, res, next) {
      console.log(name + " from fun1");
      next();
    };
  };

现在这不起作用,但是当我更改它时,它开始起作用

fun1 = name => {
  return function(req, res, next) {
    console.log(name + " from fun1");
    next();
  };
};

fun2 = name2 => {
  return function(req, res, next) {
    console.log(name + " from fun1");
    next();
  };
};

module.exports = {
  fun1,
  fun2
};

现在,这可能看起来像一个愚蠢的问题,如果它有效,那么我为什么要问,但是,我应该在 index.js 文件中进行哪些更改,以便我的第一种 module.export开始工作。纯属好奇

谢谢

node.js 中的很多东西都是简单的设计模式。 Node.js 在 javascript 最初发布时引入了零扩展(这包括它的模块系统)。即使在今天,node.js 的语法扩展也为零。 Node.js 只是 javascript 带有额外的库和一个特殊的运行时环境(所有模块都在 IIFE 中计算)

话虽如此,module.exports 不是语法。它只是javascript中的一个普通变量。具体来说,变量 module 是一个对象,节点的模块系统将检查此 module 变量以查看它是否具有名为 exports 的 属性。如果 module 有一个 exports 属性 那么它的值被认为是导出的模块。

因为 module 只是一个普通变量,它遵循正常的变量行为。如果您重新分配一个变量,它的值将会改变。例如:

var x = 0;
console.log(x); // prints 0;
x = 100;
console.log(x); // prints 100, not 0 and 100

因此,module.exports也一样:

module.exports = 'hello';
console.log(module.exports); // prints 'hello'
module.exports = 'world';
console.log(module.exports); // prints 'world', not 'hello world'