express-validator 将验证提取到单独的文件中
express-validator extracting validation into separate file
我正在尝试使用快速验证器验证一些输入,但我的设置与文档中的设置不同。
我正在验证 body.payload 是否不为 null
this.validator.document
public document = async (req: Request, res: Response, next: NextFunction) => {
check("payload").exists({ checkNull: true });
try {
validationResult(req).throw();
next();
} catch (err) {
res.status(422).json({ errors: err.mapped() });
}
}
this.controller.document
public document = async (req: Request, res: Response): Promise<any> => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
}
文档路径
this.router.post("/:id/document",
this.jwtGuard,
this.validator.document,
this.controller.document);
我知道检查本身就是一个中间件,所以我如何在我现有的验证器函数中处理它,它之前可能有一些其他验证。
目前这不起作用,即使负载设置为空。它应该捕获错误和 return 422 响应,但它不是。
在validator.document
中:
public document = () => check("payload").exists({ checkNull: true });
在documentRoute
中:
this.router.post("/:id/document",
this.jwtGuard,
this.validator.document(), // notice the parentheses
this.controller.document);
Update:如果要处理validator.document
中的错误,需要在声明路由时先调用check
中间件:
this.router.post("/:id/document",
this.jwtGuard,
check("payload").exists({ checkNull: true }),
this.validator.document,
this.controller.document);
并且在 validator.document
中:
public document = async (req: Request, res: Response, next: NextFunction) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
}
更新2:如果你有多个check操作,不想让你的路由定义臃肿,我建议你使用schema validation.
我正在尝试使用快速验证器验证一些输入,但我的设置与文档中的设置不同。
我正在验证 body.payload 是否不为 null
this.validator.document
public document = async (req: Request, res: Response, next: NextFunction) => {
check("payload").exists({ checkNull: true });
try {
validationResult(req).throw();
next();
} catch (err) {
res.status(422).json({ errors: err.mapped() });
}
}
this.controller.document
public document = async (req: Request, res: Response): Promise<any> => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
}
文档路径
this.router.post("/:id/document",
this.jwtGuard,
this.validator.document,
this.controller.document);
我知道检查本身就是一个中间件,所以我如何在我现有的验证器函数中处理它,它之前可能有一些其他验证。
目前这不起作用,即使负载设置为空。它应该捕获错误和 return 422 响应,但它不是。
在validator.document
中:
public document = () => check("payload").exists({ checkNull: true });
在documentRoute
中:
this.router.post("/:id/document",
this.jwtGuard,
this.validator.document(), // notice the parentheses
this.controller.document);
Update:如果要处理validator.document
中的错误,需要在声明路由时先调用check
中间件:
this.router.post("/:id/document",
this.jwtGuard,
check("payload").exists({ checkNull: true }),
this.validator.document,
this.controller.document);
并且在 validator.document
中:
public document = async (req: Request, res: Response, next: NextFunction) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
}
更新2:如果你有多个check操作,不想让你的路由定义臃肿,我建议你使用schema validation.