New release is coming soon! If you want to try out the latest features, simply run npm i -s moleculer@next. The docs for the latest version are available here.
Валидация параметров
Для проверки параметров в Действиях и Событиях используется промежуточный слой валидации.
Fastest Validator
По умолчанию в молекулере используется библиотека fastest-validator.
Использование по умолчанию
//moleculer.config.js module.exports = { nodeID: "node-100", validator: true// Использовать Fastest Validator по умолчанию }
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.