为什么catch块不会触发,应用程序在node.js中停止工作

我有以下代码:

try { user.findOne({ Email: req.body.email }, function (e, d) { if (d) { res.json({ 'success': false, 'json': null, 'message': 'This email already exists!', 'status': 200 }); } else { var u = new user(); u.Email = req.body.email; u.Password = req.body.password; u.Name = req.body.name; user.save(function (e, d) { res.json(d); }); } }); } catch (ex) { console.log(ex.message + " \n" + ex.stack); res.json({ 'success': false, 'json': ex, 'message': 'Opps! something wen wrong please try again later!', 'status': 500 }); } } 

我有一个例外行user.save(function (e, d) {我解决了这个问题,但问题是我看到catch块根本不会触发和节点服务器由于exception停止如果我把try块在user.findOne catch块会被火灾任何人都可以请解释一下为什么在节点应用中这种行为?谢谢!

findOne方法是asyn进程,所以你的try catch语句不会捕获在callback方法中发生的exception。 你必须把你的try catch语句放在callback方法中来捕获exception。

  user.findOne({ Email: req.body.email }, function(e, d) { try { if (d) { res.json({ 'success': false, 'json': null, 'message': 'This email already exists!', 'status': 200 }); } else { var u = new user(); u.Email = req.body.email; u.Password = req.body.password; u.Name = req.body.name; user.save(function(e, d) { res.json(d); }); } } catch (ex) { console.log(ex.message + " \n" + ex.stack); res.json({ 'success': false, 'json': ex, 'message': 'Opps! something wen wrong please try again later!', 'status': 500 }); } }););