【问题标题】:javascript objects confusion [duplicate]javascript对象混淆[重复]
【发布时间】:2013-01-01 02:23:28
【问题描述】:

可能重复:
What is the purpose of NodeJS module.exports and how do you use it?

我有以下代码:

var express = require('express');
var app = module.exports= express();
require('./config/environment.js')(app, express, __dirname);
require('./routes/default.js')(app, __dirname);


module.exports = function (app, express, dirname) {
....
};

module.exports = function (app, dirname) {
....
};

这段代码发生了什么。第二个字符串说,module.exports 和 app 是同一个对象,对吧?

但是在函数(...)部分应用程序作为参数传递,并且该代码喜欢“对对象'模块'添加方法'导出'并执行2次”我想添加一些想要在内部使用的函数每个函数(...),但不能,因为不了解该结构中发生了什么。 谢谢

【问题讨论】:

  • 这一切都在一个文件中吗?我也很困惑为什么 module.exports 在同一个文件中定义了三个不同的时间。如果这些陈述在单独的文件中,请更清楚地说明。
  • 在 3 个单独的文件中。但为什么它是主要的,一个文件还是三个?
  • 这有很大的不同,因为 node.js 模块是基于文件的。当您引用require 中的文件时,它会运行指定文件中的代码并返回该文件中module.exports 的值。见What is the purpose of NodeJS module.exports and how do you use it?module.exports vs exports in nodeJS

标签: javascript node.js express


【解决方案1】:

为什么要分配 module.exports 三次?在您的代码中,module.exports 将首先等于调用 express 返回的内容。然后 module.exports 将等于您的函数(不是它返回的),并将接受 3 个参数。然后 module.exports 将等于您的最终函数(同样不是它返回的),带有 2 个参数。因此,在您的代码结束时 module.exports 将等于该最终功能。所以我看不出前两个任务有什么需要。 App 最后将等于 module.exports,因为 app 一直指向 module.exports。您是否希望将 app 作为参数传递给它并不重要,因为在将函数分配给 module.exports 之后,在上面的代码中,您实际上没有将 app 传递给函数。您在这里所做的只是将参数命名为“app”。

我认为您要么错过了这里的代码,要么对您过去可能使用过的其他语言感到非常困惑。

如果您对语言不清楚,请查找 Douglas Crockford。

希望对你有帮助。

【讨论】:

  • 正如您所怀疑的,OP 省略了代码。具体来说,OP 已经感觉到每个 module.exports 分配都在一个单独的文件中(请参阅 OP 对问题的评论)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2018-06-11
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2015-10-04
相关资源
最近更新 更多