#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 для проверки входных данных.