broker.call("say.hello").then(console.log) .catch(err =>console.error(err.message)); // -> throw ValidationError: "The 'name' field is required!"
broker.call("say.hello", { name: 123 }).then(console.log) .catch(err =>console.error(err.message)); // -> throw ValidationError: "The 'name' field must be a string!"
FastestValidator (>= v1.11.0) supports async custom validators, meaning that you can pass metadata for custom validator functions. In Moleculer, the FastestValidator passes the ctx as metadata. It means you can access the current context, service, broker. This allows you to make async calls (e.g calling another service) in custom checker functions. To enable it you must set useNewCustomCheckerFunction to true in moleculer.config.js
const res = await ctx.call("users.isValid", { id: value }); if (res !== true) errors.push({ type: "invalidOwner", field: "owner", actual: value }); return value; } }, }, /* ... */ } }
Валидация событий
Также поддерживается валидация параметров события. Чтобы включить его, определите params в определении события.
Пожалуйста, обратите внимание, что ошибки валидации не отправляются вызывающему коду, как это происходит с ошибками действия. Ошибки валидации событий логируются, но вы также можно поймать их с помощью глобального обработчика ошибок.
// mailer.service.js module.exports = { name: "mailer", events: { "send.mail": { // Схема валидации, записанная с использованием сокращённой записи // Больше информации: https://github.com/icebob/fastest-validator#shorthand-definitions params: { from: "string|optional", to: "email", subject: "string" }, handler(ctx) { this.logger.info("Event received, parameters OK!", ctx.params); } } } };
Пользовательский валидатор
Имеется возможность реализовать пользовательские валидаторы. Мы рекомендуем скопировать источник Fastest Validator и реализовать методы compile и validate.