nodejs 7.x 使用mongoose + async/await 异常怎么处理?
发布于 6 个月前 作者 liygheart 2133 次浏览 来自 问答

今天尝试了一下在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项目里有没有统一处理异常的方法?

10 回复

写个中间件, 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 => { … })

eggjs你值得拥有,代码里try catch,加上全局处理错误。完美解决

回到顶部