我认为我不太了解Node.js中exports
的工作方式。在一些示例代码中,我注意到以这种方式使用的exports
对象:
exports = mongoose = require('mongoose')
mongoose.connect(config.db.uri)
exports = Schema = mongoose.Schema
当您两次使用
exports =
时,幕后发生了什么?在我看来,“ Mongoose ”不应该导出。我做了这个快速测试:var foo
, bar
exports = foo = 'foo'
exports = bar = 'bar'
// reports 'bar' only
console.log(exports)
第二个测试确实覆盖了第一个导出。
最佳答案
我的猜测是该示例代码的原始作者对module.exports
和exports
感到困惑。要使用exports
对象,您必须向其添加属性,如下所示:
exports.size = 42;
如果将
exports
变量重新分配给新对象,则基本上将失去对node.js为您提供的全局导出对象的访问权限。如果执行两次或三次或N次,效果是相同的。这毫无用处。例如:mod_b.jsvar realExports = exports;
realExports.height = 42;
var exports = {};
exports.weight = 43;
并在mod_a.js中
var mod_b = require('./mod_b');
console.dir(mod_b);
运行
node mod_a.js
,您将获得:{ height: 42 }
注意
height
存在,但weight
不存在。现在,您可以做的是将module.exports
分配为一个对象,这就是当另一个模块require
成为您的模块时将返回的对象。这样您会看到类似的东西。var x = 10;
var y = 20;
module.exports = {x: x, y: y};
哪个会做您所期望的。这是一些有关详细信息的文章。
Node.js Module – exports vs module.exports
What is the purpose of NodeJS module.exports and how do you use it?
Mastering Node
关于node.js - 了解NodeJS中的导出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9627044/