Я хочу проверить объект запроса с помощью Express-Validator.Предположим, у меня есть два маршрута: GET / users /: id (fetchUserById) и POST / users (createUser). Маршрут
this.router = express.Router();
this.router.route('/').post(this.userRequestValidator.createUser, this.userController.createUser);
this.router.route('/:id').get(this.userRequestValidator.fetchUserById, this.userController.fetchUserById);
.Я вызываю промежуточное ПО проверки правильности перед вызовом логики контроллера.Сначала я создал базовый валидатор, работающий с ошибками валидации и возвращающий HTTP 400 в случае сбоя.
export abstract class RequestValidator {
protected validate = async (request: Request, response: Response, next: NextFunction): Promise<void> => {
const errors: Result<ValidationError> = validationResult(request);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
} else {
next();
}
};
}
Мои функции валидатора userRequestValidator.createUser и userRequestValidator.fetchUserById просто нужно расширить RequestValidator и реализовать проверки
export class UserRequestValidator extends RequestValidator {
public createUser = [
body('username')
.isString()
.exists(),
body('password')
.isString()
.exists(),
this.validate,
];
public fetchUserById = [
param('id')
.isString()
.isUUID()
.exists(),
this.validate,
];
}
Когда я звоню GET localhost:3000/users/abc
, я получаю этот ответ
{
"errors": [
{
"value": "abc",
"msg": "Invalid value",
"param": "id",
"location": "params"
}
]
}
Это ответ, который я ожидаю.Но когда я звоню POST localhost:3000/users
с пустым телом, я получаю этот ответ
{
"errors": [
{
"msg": "Invalid value",
"param": "username",
"location": "body"
},
{
"msg": "Invalid value",
"param": "username",
"location": "body"
},
{
"msg": "Invalid value",
"param": "password",
"location": "body"
},
{
"msg": "Invalid value",
"param": "password",
"location": "body"
}
]
}
Кто-нибудь знает, как я могу исправить это поведение или что не так с моей настройкой?