为了使mongoose设置更容易,我在/ lib目录中创建了一个mongoose.js文件.它设置mongoose所以消耗模块可以准备连接等.问题是,当尝试访问product.js上的mongoose.Schema方法时,它会抛出未定义的方法.在为我自己的对象做类似的练习时,这不会发生.这是有问题的代码.
/lib/mongoose.js(lib文件)
var mongoose = require('mongoose');
mongoose.connect(process.env.PPC_API_MONGODB_URL);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
console.log('db open');
});
exports = mongoose;
Run Code Online (Sandbox Code Playgroud)
/models/product.js (消费文件)
var mongoose = require('../lib/mongoose.js');
var productSchema = mongoose.Schema({ // results in method undefined here
name: String
});
exports = mongoose.model('Product', productSchema);
Run Code Online (Sandbox Code Playgroud)
如果我在/lib/mongoose.js中执行以下操作,我可以使其工作
exports.mongoose = mongoose;
Run Code Online (Sandbox Code Playgroud)
然后在/models/product.js中
var mongoose = require('mongoose').mongoose;
Run Code Online (Sandbox Code Playgroud)
但这不干净,我只是不明白为什么第一个选项不起作用.
如果您可以向我展示我做错了什么或解释为什么第一种方法不起作用,那么我的投票结果将被视为已核对的答案.
您无法重新分配exports变量,而是可以使用module.exports
module.exports = mongoose;
Run Code Online (Sandbox Code Playgroud)
如果你想知道为什么,你在每个模块中拥有的基本上是这样的:
var module = { exports: {} };
var exports = module.exports;
Run Code Online (Sandbox Code Playgroud)
因此,如果您添加属性exports,您仍然可以访问它们module.exports
exports.test = function () { console.log('test'); };
module.exports.test(); // outputs 'test'
Run Code Online (Sandbox Code Playgroud)
但是,如果你重新分配exports,然后module.exports和exports一点不同的东西.
var module = { exports: {} };
var exports = module.exports;
exports = { test: 'test' };
console.log(exports); // { test: 'test' }
console.log(module.exports); // {}
Run Code Online (Sandbox Code Playgroud)
当require()查找要包含的内容时,它会使用module.exports.
| 归档时间: |
|
| 查看次数: |
4388 次 |
| 最近记录: |