我经常看到以下代码段:
collection.insert({"some": "data"}, function (err, inserted) {
if (err) { /* do something */ return; }
if (!inserted || !inserted.length) {
console.error("Nothing inserted ...");
return;
}
/* do something */
});
真的需要第二个if
吗?
当insert
方法未在回调中发送err
且inserted
变量为undefined
,null
或类似内容时?
答案 0 :(得分:2)
传递给insert
回调的第二个参数可以null
(err
也是null
),根据{ {3}},当您使用MongoDB 2.6(或更高版本)时,写入问题为0并且传递了回调函数。
我没有运行2.6,所以无法自己测试:
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/demo?w=0', function(err, db) {
db.collection('test').insert({ foo : 'bar' }, function(err, inserted) {
console.log('I', inserted);
});
});
但是,inserted
在这种情况下不是数组,而是null
。所以检查必须是if (! inserted) { ... }
,这不会是一个错误(将写入关注设置为0意味着你只是不想知道插入是否失败)。
答案 1 :(得分:0)
if
回调我们不需要第二个insert()
。但我们可能需要第二次if
进行update()
回调。
我认为该代码的作者将insert()
与update()
(?)
collection.insert({"some": "data"}, {safe: true}, function(err, records){
if (err) throw err;
console.log(records);
});
附注:根据文档,我们必须通过{safe:true}才能获得err param
中的callback
,因为它默认为false
。但我觉得默认情况下true
对我来说(包括制作模式)
collection.update({"some": "data"}, function (err, count) {
if(err) throw err;
// SECOND IF
if(!count) {
console.log('NOTHING UPDATED');
}
});