我有以下功能在我的应用中创建用户,我试图检测是否已经创建了管理员用户,并阻止创建另一个用户。
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
我以不恰当的方式抛出错误?是什么导致第一次投掷没有崩溃而不是第二次?
提前感谢您提供任何帮助
答案 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