此问题的主题是我在Node / Express应用程序中执行此insertOne
操作时收到的错误消息。
代码:
router.post('/api/formula-list', function(req, res){
var db = req.db.collection('formulas');
var formula = data; //an array stored elsewhere in the program
db.insertOne({
"name": req.body.name,
"description": req.body.description,
"formula": formula
}, function(err, r) {
assert.equal(null, err);
assert.equal(1, r.insertedCount);
});
data.length = 0;
});
我认为这意味着我在insertOne
中遇到了回调问题,并且在完成之前会对数据库进行调用。
我不知道如何解决这个问题。我更喜欢一个纯javascript / mongo的解决方案,并且不需要外部库,因为我正在努力研究Node和Mongo背后的核心技术。
此question和this one非常相似,但是其中一个并没有真正有用的答案,而另一个则使用了我想要避免使用的猫鼬。
更新
在我的app.js中,我像这样初始化驱动程序:
APP.JS
// make mongodb available to the application
app.use((req, res, next) => {
mongo.connect('mongodb://localhost:27017/formulas', (e, db) => {
if (e) return next(e);
req.db = db;
next();
});
// cleanup
req.on('end', () => { req.db.close(); });
});