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 或承诺避免嵌套回调。
不过,只嵌套一次也不错。
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 或承诺避免嵌套回调。
不过,只嵌套一次也不错。