Mongoose+Node API 延迟数据库查询

Mongoose+Node API delays db query

GET 很好用,DEL 也很好用。 但是 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);
 });

但是如果我用删除来做,它就像正常一样工作。删除 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);
        });
});

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

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

至少您需要重构您的函数,以便在从 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);
        })
    })
});

不过,这会导致"callback hell"节点出名。人们经常使用异步库:最常见的事情是使用异步库:https://github.com/caolan/async 或承诺避免嵌套回调。

不过,只嵌套一次也不错。