未处理的错误' trowing错误时的事件

时间:2016-10-19 18:09:58

标签: node.js koa

我有以下功能在我的应用中创建用户,我试图检测是否已经创建了管理员用户,并阻止创建另一个用户。

export async function createUser (ctx) {
  if ( ctx.request.body.type == undefined  ) {
      ctx.throw(400, 'Bad Request')
  }
  if (ctx.request.body.type === 'admin') {
    User.findOne({type:'admin'}, (err, usr) => {
      if (err)
        ctx.throw(422, err.message)
      if (usr){
        ctx.throw(400, 'Duplicate Admin')
      }
    })
  }
....

第一个ctx.throw(400, 'Bad Request')有效,但如果找到其他管理员用户,则ctx.throw(400, 'Duplicate Admin')会导致以下错误,导致应用崩溃:

events.js:160
      throw er; // Unhandled 'error' event
      ^

BadRequestError: Duplicate Admin

我以不恰当的方式抛出错误?是什么导致第一次投掷没有崩溃而不是第二次?

提前感谢您提供任何帮助

2 个答案:

答案 0 :(得分:0)

首先,检查用户'的类型。变量。如果它是一个数组或对象,if(user){....}将始终返回true,即使它是空的。并尝试添加

app.on('error', function() {
  console.log('yep this is an error');
});

事件监听器

答案 1 :(得分:0)

您在<trust level="Medium" />回调中异步投掷。这崩溃了。

相反,请查看您正在使用的库,它会为您提供User.findOne并查看它是否可以返回承诺,或者将其包装在蓝鸟的User.findOne中,如果它没有#&# 39;吨

这是您想要的代码:

Promise.promisify