let handler = AuthenticateHandler()
self.urlSession = URLSession(configuration: URLSessionConfiguration.default, delegate: handler, delegateQueue: OperationQueue.main)
将Check直接作为中间件传递是使用它的唯一方法吗? 我们是否仍可以使用req.checkbody(field,errormessage)格式或单独的中间件函数中的等效项导致错误消息必须从会话中获取
我想从req.session中访问一个变量,并基于该变量生成自定义错误消息
先前的实现使用req.checkBody()效果很好
进行了新的更改后,我应该如何处理这种情况。
答案 0 :(得分:2)
您可以在自己的处理程序中重写默认错误消息。
假设您的错误消息存储在req.session.errors
中,并且这是一个将特定验证映射到特定错误消息的对象。
例如:
// req.session.errors =
{
"USERNAME_EMPTY" : "The username cannot be empty",
"PASSWORD_EMPTY" : "The password cannot be empty",
}
接下来,您将为每次验证提供与上述对象的键匹配的自定义消息:
check('username').not().isEmpty().withMessage('USERNAME_EMPTY')
check('password').not().isEmpty().withMessage('PASSWORD_EMPTY')
最后,在处理程序内部,您将执行从验证错误到错误消息值的查找:
if (! errors.isEmpty()) {
const list = errors.array();
list.forEach(error => {
error.msg = req.session.errors[error.msg] || error.msg;
});
return res.status(422).json({ errors: list });
}
或者仅依赖于express-validator
的旧版本,以便您可以继续使用旧版API。