抛出错误时未处理的 'error' 事件
Unhandled 'error' event when trowing error
我有以下用于在我的应用程序中创建用户的功能,我正在尝试检测是否已经创建了管理员用户并阻止创建另一个用户。
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
我以不恰当的方式抛出错误?是什么导致第一次投掷没有崩溃但第二次没有?
提前感谢您的帮助
首先,检查 'user' variable.If 的类型是数组还是对象,if(user){....}
将始终 return 为真,即使它是空的。并尝试添加
app.on('error', function() {
console.log('yep this is an error');
});
事件侦听器
您在 User.findOne
回调中异步抛出。这会崩溃。
相反,查看您正在使用的库,它为您提供 User.findOne
并查看它是否可以 return 一个承诺,或者如果没有,则将其包装在 bluebird 的 Promise.promisify
中' t.
这是您要到达的代码:
const user = await User.findOne({ type: 'admin' }) // returns a promise
if (user) ctx.throw(400, 'Duplicate admin')
我有以下用于在我的应用程序中创建用户的功能,我正在尝试检测是否已经创建了管理员用户并阻止创建另一个用户。
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
我以不恰当的方式抛出错误?是什么导致第一次投掷没有崩溃但第二次没有?
提前感谢您的帮助
首先,检查 'user' variable.If 的类型是数组还是对象,if(user){....}
将始终 return 为真,即使它是空的。并尝试添加
app.on('error', function() {
console.log('yep this is an error');
});
事件侦听器
您在 User.findOne
回调中异步抛出。这会崩溃。
相反,查看您正在使用的库,它为您提供 User.findOne
并查看它是否可以 return 一个承诺,或者如果没有,则将其包装在 bluebird 的 Promise.promisify
中' t.
这是您要到达的代码:
const user = await User.findOne({ type: 'admin' }) // returns a promise
if (user) ctx.throw(400, 'Duplicate admin')