我认为我不太了解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.exportsexports感到困惑。要使用exports对象,您必须向其添加属性,如下所示:

exports.size = 42;

如果将exports变量重新分配给新对象,则基本上将失去对node.js为您提供的全局导出对象的访问权限。如果执行两次或三次或N次,效果是相同的。这毫无用处。例如:mod_b.js
var 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/

10-11 23:49