gpt4 book ai didi

node.js - 快速验证器将验证提取到单独的文件中

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:43 24 4
gpt4 key购买 nike

我正在尝试使用快速验证器验证某些输入,但我的设置与文档中的设置不同。

我正在验证 body.payload 是否不为空

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);

我知道检查本身就是一个中间件,所以我如何在现有的验证器函数中处理这个问题,该函数之前可能有一些其他验证。

目前这不起作用,即使有效负载设置为空。它应该捕获错误并返回 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);

更新:如果要处理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:如果您有多个检查操作并且不想让您的路线定义变得臃肿,我建议您使用 schema validation .

关于node.js - 快速验证器将验证提取到单独的文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54577135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com