экспресс-валидатор, извлекающий валидацию в отдельный файл - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь проверить некоторые входные данные, используя экспресс-валидатор, но у меня есть другие настройки, чем те, которые указаны в документации.

Я проверяю, если 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() });
       }
}

documentRoute

     this.router.post("/:id/document",
            this.jwtGuard,
            this.validator.document,
            this.controller.document);

Я знаю, проверка является промежуточным программным обеспечением сама по себе, так как мне справиться с этимвнутри моей существующей функции валидатора, которая может иметь какую-то другую валидацию до этого.

В настоящий момент это не работает, даже если полезная нагрузка установлена ​​в нуль.Он должен перехватить ошибку и вернуть ответ 422, но это не так.

1 Ответ

0 голосов
/ 07 февраля 2019

в 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 : Еслиу вас есть несколько операций проверки и вы не хотите раздувать определение маршрута, я предлагаю вам использовать проверку схемы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...