1

这是我的代码:

var environment = "ClientUnitTests";

//set up mongodb
var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server,
    ReplSetServers = require('mongodb').ReplSetServers,
    ObjectID = require('mongodb').ObjectID,
    Binary = require('mongodb').Binary,
    GridStore = require('mongodb').GridStore,
    Grid = require('mongodb').Grid,
    Code = require('mongodb').Code,
    BSON = require('mongodb').pure().BSON,
    assert = require('assert');

var db = new Db('test',new Server('localhost',27017),{safe:true});
db.open(function(err, db) {
    assert.equal(null, err);
});
var users = db.collection("users");

//Clean up data in test database for clientUnit tests
if (environment == "ClientUnitTests") {
    users.remove({},function(err,numberRemoved){
       console.log("inside remove call back" + numberRemoved);
    });
}

基本上,当应用程序以“ClientUnitTests”模式启动时,我试图从我的用户集合中删除所有数据。不幸的是,console.log 语句永远不会触发(也通过在那里设置一个从不触发的断点来验证)。

删除此集合中的所有文档我做错了什么?

4

1 回答 1

3

(多时刻)

Node 是一个异步环境。这意味着当我尝试调用 remove 时数据库连接未打开,这也是我的其余请求工作的原因(它们在几秒到几分钟后而不是几毫秒后出现)。

为了完整起见,这里有一个示例,它利用回调来确保根据我的环境变量进行删除:

db.open(function(err, db) {
    assert.equal(null, err);
    if (environment == "ClientUnitTests") {
        db.collection("users").remove({},function(err,numberRemoved){
            console.log("inside remove call back" + numberRemoved);
        });
    }
});
于 2013-05-26T08:58:56.247 回答