Это кажется странным способом go об этом. Согласно https://hapi.dev/module/joi/, определите вашу схему как свою собственную, затем проверьте ваши данные , используя эту схему:
const Joi = require('@hapi/joi');
const schema = Joi.object({
productId: Joi.array().items(
Joi.object(
id: Joi.string().required(),
quantity: Joi.number().required()
)
)
};
module.exports = schema;
И затем вы подтвердите это в промежуточное ПО вашего маршрута:
const Joi = require('@hapi/joi');
const schema = require(`./your/schema.js`);
function validateBody(req, res, next) {
// If validation passes, this is effectively `next()` and will call
// the next middleware function in your middleware chain.
// If it does not, this is efectively `next(some error object)`, and
// ends up calling your error handling middleware instead. If you have any.
next(schema.validate(req.body));
}
module.exports = validateBody;
которое вы используете, как и любое другое промежуточное ПО в express:
const validateBody = require(`./your/validate-body.js`);
// general error handler
app.use(function errorHandler(err, req, res, next) {
if (err === an error you know comes form Joi) {
// figure out what the best way to signal "your POST was bad"
// is for your users
res.status(400).send(...);
}
else if (...) {
// ...
}
else {
res.status(500).send(`error`);
}
});
// post handler
app.post(`blah`, ..., ..., validateBody, ..., ..., (req, res) => {
// final response
});