Mongoose + Node API延迟了数据库查询

时间:2015-02-28 19:42:41

标签: angularjs node.js express mongoose

GET很棒,DEL也很棒。 但是POST ...: 会发生什么是字符串进入db。它没有显示(在我的webapp上)。 当我添加第二个字符串时,它最终显示出来。好像有延迟?

 app.post('/api/todos', function(req, res) {
    todo.create({
        text : req.body.text,
        done : true
    }, function(err, todo) {
        if (err)
            res.send(err);
    });
        todo.find(function(err, todos){
    if(err)
        res.send(err)
    res.json(todos);
 });

但如果我用删除操作,它就像正常一样。删除了ID并显示其余的ID。

app.delete('/api/todos/:todo_id', function(req, res){
    todo.remove({
        _id : req.params.todo_id,
    }, function(err, todo){
        if(err)
            res.send(err);
});
    todo.find(function(err, todos){
        if(err)
                res.send(err)
        res.json(todos);
        });
});

我希望我的问题有道理,我不太擅长英语

1 个答案:

答案 0 :(得分:0)

您忘记了该节点是异步的。在post函数中,很可能在create函数完成之前你的find函数正在执行。

至少你会想重构你的函数,所以查找发生在从create调用的回调函数中。

你会像这样重写post函数:

app.post('/api/todos', function(req, res) {
    todo.create({
        text: req.body.text,
        done: true
    }, function (err, todo) {
        if (err) res.send(err);
        todo.find(function (err, todos) {
            if (err)
                res.send(err)
            res.json(todos);
        })
    })
});

然而,这可能导致“回调地狱”节点的出名。人们经常使用异步库:最常见的事情是使用异步库:https://github.com/caolan/async或承诺避免嵌套回调。

虽然嵌套一次并不算太糟糕。