Node.js Express 和 Mongoose,在 save() 之后渲染
Posted
技术标签:
【中文标题】Node.js Express 和 Mongoose,在 save() 之后渲染【英文标题】:Node.js Express and Mongoose, rendering after a save() 【发布时间】:2012-11-29 12:37:50 【问题描述】:我刚开始通过创建一个简单的博客网站来试验 Node.js Express 和 Mongoose。
我正在尝试构建一些路由来执行一些简单的数据库操作,但我对异步函数以及我的代码是否每次都能正确执行感到困惑。
这基本上就是我所拥有的:
app.get('/createUser', function(req, resp)
var newUser = new User(name: 'abc123', pass: 'password321');
newUser.save(function(err) // will this callback always be called correctly?
if(err) resp.send('ERROR!');
resp.send('SUCCESS!');
);
);
所以我希望将响应写为“错误!”对于保存中的任何错误,以及“成功!”保存成功时。但是,我对这些功能的时间安排感到困惑。 get() 函数会在 save() 完成之前返回吗?如果是这样,响应会不会被正确写出?
【问题讨论】:
是的,它会一直触发。别介意我的旧评论。您的回调将始终触发。 这样做是为了避免继续执行到下一行if(err) return resp.send('ERROR!');
如果 resp.send() 继续发送信息,连接何时关闭?
看这里***.com/questions/27423777/…
【参考方案1】:
get() 函数将在保存函数之前完成,但由于在执行保存回调之前没有任何内容写入响应,因此在此之前浏览器将无法获得响应.
我在您的代码中添加了一些 console.log() 调用,以便您查看执行顺序:
app.get('/createUser', function(req, resp)
console.log('this will print first');
var newUser = new User(name: 'abc123', pass: 'password321');
newUser.save(function(err) // will this callback always be called correctly?
console.log('this will print last');
if(err)
resp.send('ERROR!');
else
resp.send('SUCCESS!');
);
console.log('this will print second');
);
【讨论】:
所以浏览器正在等待第一个 resp.send() 渲染任何东西? 是的,浏览器会一直等到收到响应。但请记住,Node 不会被搁置。 Node 将返回事件循环并处理接下来发生的任何事情(例如另一个请求),并最终处理来自 save 方法的回调。以上是关于Node.js Express 和 Mongoose,在 save() 之后渲染的主要内容,如果未能解决你的问题,请参考以下文章
UnhandledPromiseRejectionWarning、Express.js 和 Node.js
使用 Node.js 和 Express 发布时如何访问请求正文?