我真的很喜欢 Aaron 的回答,多亏了他,我现在正在解决问题的路上......虽然我还没有到那里!这是我的特殊问题:
我想在单独的文件中定义我的架构和模型,这样我就可以在项目之间重复使用它们。例如,我有一个名为 W8DBItem.js 的文件,如下所示:
var mongoose = require('mongoose');
var itemSchema = new mongoose.Schema({ name: {type: String, required: true}});
module.exports = mongoose.model('W8DBItem', itemSchema);
在我的程序文件中,我这样做:
var mongoose = require('mongoose');
var W8DBItem = require('../w8/W8DBItem.js');
var dbURL ='mongodb://localhost:27017/default';
var mongoOptions = { useNewUrlParser: true, bufferCommands: false }
mongoose.connect(dbURL, mongoOptions);
var db = mongoose.connection;
// DEAL WITH CONNECTION ERROR
db.on('error', console.error.bind(console, 'connection error:'));
// PREP DATA
var aWeight = { name: "My Test Name" };
var newWeightItem = W8DBItem(aWeight);
// CONNECTION ESTABLISHED
db.once('open', function() {
console.log("Here 1")
// TRY TO SAVE
newWeightItem.save(function (err, newWeightItem) {
if (err) {
console.log("Here 2");
console.log(err);
}
else {
console.log("Here 3");
console.log(newWeightItem);
}
});
});
当我运行这个程序时,我在控制台中得到“Here 1”,但从来没有“Here 2”或“Here 3”。
从 Aaron 的帖子中,我了解到 W8DBItem 对象没有关联(和打开的)连接,但我不确定如何解决问题。我可以在 W8DBItem.js 文件中连接到数据库,但我真的不喜欢用对象硬编码服务器信息 - 我希望这些对象在不同的文件中使用,也许使用不同的服务器。
非常感谢您的想法和建议!
[编辑:找到解决方案!!!]
我没有从我的目标文件中导出我的 mongoose.model,而是仅导出架构:
var mongoose = require('mongoose');
var itemSchema = new mongoose.Schema({name: {type: String, required: true}});
module.exports = itemSchema;
然后在我的程序文件中执行以下操作:
var itemSchema = require('../w8/W8DBItemSchema.js');
...
var W8DBItem = db.model('W8DBItem', itemSchema);
var newWeightItem = W8DBItem(aWeight);
...
像魅力一样工作。我希望这对某人有帮助!