我正在使用{{3} }@2.0.4,我想要整齐地抽象出模块中的mongoose.connect()
调用。
所以使用nodejs,我期望以下工作:
在myMongoose.coffee
:
mongoose = require 'mongoose'
mongoose.connect 'mongodb://localhost/test'
@exports = mongoose
并在MyModel.coffee
mongoose = require 'myMongoose'
console.log mongoose #Prints massive object (including Schema)
Schema = mongoose.Schema
console.log Schema # undefined
为什么访问一个子元素(技术上是构造函数,我认为),如Schema不起作用?即使将@exports.Schema = mongoose.Schema
添加到myMongoose.coffee也无法解决问题。
答案 0 :(得分:6)
你必须设置
module.exports = mongoose
您无法使用新对象覆盖exports
。您只能向exports
添加属性。
这是因为您的模块实际上是以下内容:
(function(require, module, exports, process) {
// your code
})();
exports
只是一个参数,重新分配它什么都不做。
因此,如果要覆盖导出,请使用module.exports
。如果您想延长exports
使用exports.Foo
但是,如果你覆盖module.exports
,最安全的做法是继续写module.exports
代替exports
答案 1 :(得分:1)
+1给Raynos的答案,但还有更多你应该知道的事情:
@ is exports # true!
所以当你写@exports = mongoose
时,这相当于exports.exports = mongoose
!
@
可能更直观地指向module
,但是,能够使用@
导出大量内容非常方便,尤其是如果您想要在浏览器中运行相同的代码(其中@
将指向window
,您可以快速填充全局范围。)