我使用external()方法进行验证。我有自己的验证,检查登录是否存在于数据库中。但我自己的验证错误不会与其他方法一起返回
例如,如果password和confirmedPassword不匹配,Joi验证会通知这一点,但不会通知isLoginTaken。在纠正密码匹配后,将返回isLoginTaken错误
是否可以将所有错误一起返回?
自己的验证方法
const checkIsExistLogin = (login) => {
const isLoginExist = UserModel.exists({ login })
if (isLoginExist !== null) {
throw new Joi.ValidationError(
'string.login',
[
{
message: 'login exist',
path: ['login'],
type: 'string.login',
context: {
key: 'login',
label: 'login',
login,
},
},
],
login
)
}
}
导出并调用validateAsync函数
export const validateUser = (user) =>
JoiSchema.validateAsync(user, { abortEarly: false })
路由控制器
router.post('/', async (req, res) => {
try {
await validateUser(req.body)
let user = new User({
name: req?.body?.name,
lastName: req?.body?.lastName,
birthDate: req?.body?.birthDate,
pin: req?.body?.pin,
adress: req?.body?.adress,
login: req?.body?.login,
password: req?.body?.password,
passwordConfirmation: req?.body?.passwordConfirmation,
})
user = await user.save()
return res.json({
success: true,
data: user,
message: "You've added new user",
})
} catch (error) {
return res.status(400).json({
success: false,
data: [],
message: error,
})
}
})
我会很高兴任何提示。
1条答案
按热度按时间z31licg01#
如果你想知道是否可以一起返回所有的错误,那么我有一个选项可以让你直接使用。
1.创建一个Map,其中包含您将抛出的所有错误:
1.如果你的代码的某个部分给你一个错误,或者你想在那里抛出一个错误,那么把这个错误添加到Map中:
Contry/catch:
Normal(在这种情况下,Joi也是一样的,只是使用error变量):
1.一旦你完成了你的验证,那么你必须通过检查Map的大小来检查是否有任何错误,如果是这样的话,就像错误一样抛出它,然后在你想要显示错误的时候捕捉它:
1.现在,您可以对Map执行任何您想执行的操作,例如,抛出一条错误消息,该消息是您发现的验证错误列表。