爲了簡化貓鼬設置,我在我的/ lib目錄中創建了一個mongoose.js文件。它設置貓鼬所以消費模塊可以準備好連接等。問題是,當試圖訪問產品.js上的方法mongoose.Schema時,它拋出的方法未定義。在爲自己的對象做類似的練習時,這不會發生。這是有問題的代碼。Node.js module.exports分配導致方法未定義錯誤
/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;
/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);
,我可以得到,如果這工作,我請在/lib/mongoose.js中執行以下操作:
exports.mongoose = mongoose;
然後內/models/product.js
var mongoose = require('mongoose').mongoose;
,但這是不乾淨的,我簡直不理解爲什麼第一個選項是行不通的。
如果你可以告訴我我做錯了什麼,或者解釋爲什麼第一種方法不起作用,那麼這將被視爲我的投票結果。
謝謝!這是一個非常簡單的解決方案。 – 2013-04-09 18:29:38
我很欣賞更詳細的解釋。這對我來說更有意義,因爲「出口」變量只是附加到「模塊」的參考。如果你重新分配,那麼你正在擦除「模塊」引用。真棒! – 2013-04-09 19:27:31
是的,作爲一個便箋,我總是使用'module.exports',因爲'exports'的所有缺點。最重要的是,不要在一個文件中混用這兩種文件,否則會遇到問題。 – 2013-04-09 20:34:01