今天尝试了一下在express项目里用async/await(之前用的是async做的同步执行)结果还真可以,又试了一下 yield,报错 nodejs 6.x 好像还不行
我的用法:
mongoose.Promise = require('bluebird');
mongoose.connect('mongodb://127.0.0.1/demo');
exports.info = async function(req, res) {
var login = req.params.login;
if (login) {
var user = await User.findOne({
login: login
});
var topics = await Topic.find({
user: user
})
.populate('user')
.skip(0)
.limit(7);
var replies = await Reply.find({
user: user
})
.populate('topic')
.populate('user')
.skip(0)
.limit(7);
res.render('user', {
user: user,
topics: topics,
replies: replies,
layout: req.get('X-PJAX')
})
} else {
res.send({
code: 201,
msg: '用户不存在'
})
}
}
然后想问一下,mongoose执行的异常怎么处理呢?在express项目里有没有统一处理异常的方法?
try catch
写个中间件, try { await next(); }catch (err){ //自己处理err }
@imhered @JustforNode 我知道try catch , 但有没有办法可以有异常了就往上抛,然后系统做一个统一处理的方法去处理
@liygheart 中间件的 catch (err){ //自己处理err } 这部分就是统一处理方法啊
@JustforNode 我好像明白了点啥,谢谢了
@liygheart try catch也可以throw的,只要在上层再次try catch就行了
在async/await 中可以是使用 try/catch 或者抛出异常(异常一般是 await 后面的promise走了reject逻辑 )到上层也可以 在async/await 中使用 try catch 相当于 apromise.catah( e => { … })
@zhhb 谢谢
mark
eggjs你值得拥有,代码里try catch,加上全局处理错误。完美解决