Неожиданная ошибка, возвращенная экспресс-валидатором при использовании пользовательского валидатора

#javascript #node.js #express #express-validator

Вопрос:

Я пытаюсь проверить, является ли products отправленное от клиента массивом, а не пустым, используя пользовательский валидатор в express-валидаторе.

Однако, когда я отправляю правильный json, я все равно получаю ошибку, которая выглядит следующим образом:

ошибка, возвращенная из API:

 {  "error": [  {  "value": [  {  "productId": "548fefewrTNH563",  "quantity": 3  },  {  "productId": "548fefewrT4354563",  "quantity": 2  }  ],  "msg": "Invalid value",  "param": "products",  "location": "body"  }  ] }  

json Отправленный запрос POST

 {  "userId" : "61923f2df64756f1df629a7c",  "products" : [  {  "productId" : "548fefewrTNH563",  "quantity" : 3  },  {  "productId" : "548fefewrT4354563",  "quantity" : 2  }  ],  "amount" : "2",  "address" : "dfjkdj3djfnjj4jndfn" }  

Код в файле валидатора:

 const {check , validationResult} = require('express-validator');  exports.validateCreateOrder = [  check("userId", "UserId is missing").not().isEmpty(),  check("products").custom(products=gt;{  if(!Array.isArray(products))throw new Error('Products need to be an array')  if (products.length == 0 ) throw new Error ('Product array cant be empty')  }),  check("amount", "Amount is missing").not().isEmpty(),  check("address", "Address is missing").not().isEmpty(), (req, res, next) =gt; {  const errors = validationResult(req);  if (!errors.isEmpty())  return res.status(400).json({ error: errors.array() });  next(); },  

]

Комментарии:

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

2. Да, я не нахожу его простым в использовании. В итоге я отказался от использования этого пакета и вместо этого создал промежуточное программное обеспечение express для проверки входных данных.