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);
});
});
我希望我的问题有道理,我不太擅长英语
答案 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或承诺避免嵌套回调。
虽然嵌套一次并不算太糟糕。