FeathersJS - 如何取消挂钩错误
FeathersJS - How to cancel hook on error
在我的注册服务中,我创建了一个 'before' 挂钩来检查用户是否已经注册参加锦标赛。如果发现用户已注册,我会抛出错误。
根据 feathersjs 文档:
If a promise fails, the error will be propagated immediately and will
exit out of the promise chain.
我遇到的问题是错误 "triggered" 并显示用户已经注册,但注册仍在进行。意思是,钩子永远不会 "exited".
这是我的函数
exports.checkRegistered = () => {
return (hook) => {
let tourneyId = hook.data.tourneyId
let userId = hook.data.userId
return hook.service.find({
query: {
tourneyId: tourneyId,
userId: userId
}
}).then(reg => {
// User already registered
if (reg.data.length != 0) {
// Also tried to return a promise with same result.
// return Promise.reject(new Error('Already registered.'))
throw new Error('Already registered');
}
}).catch(err => {})
}
}
这是我的"before hook"对象
exports.before = {
create: [
api.checkRegistered()
]
};
问题是.catch(err => {})
。它将 return 一个刚刚通过 undefined
成功解决的承诺,然后它将继续挂钩链,就好像没有发生错误一样。删除它应该可以解决您的问题。
在我的注册服务中,我创建了一个 'before' 挂钩来检查用户是否已经注册参加锦标赛。如果发现用户已注册,我会抛出错误。
根据 feathersjs 文档:
If a promise fails, the error will be propagated immediately and will exit out of the promise chain.
我遇到的问题是错误 "triggered" 并显示用户已经注册,但注册仍在进行。意思是,钩子永远不会 "exited".
这是我的函数
exports.checkRegistered = () => {
return (hook) => {
let tourneyId = hook.data.tourneyId
let userId = hook.data.userId
return hook.service.find({
query: {
tourneyId: tourneyId,
userId: userId
}
}).then(reg => {
// User already registered
if (reg.data.length != 0) {
// Also tried to return a promise with same result.
// return Promise.reject(new Error('Already registered.'))
throw new Error('Already registered');
}
}).catch(err => {})
}
}
这是我的"before hook"对象
exports.before = {
create: [
api.checkRegistered()
]
};
问题是.catch(err => {})
。它将 return 一个刚刚通过 undefined
成功解决的承诺,然后它将继续挂钩链,就好像没有发生错误一样。删除它应该可以解决您的问题。