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.
Validação de parâmetros
Um middleware de validação é usado para validações de parâmetros de Ações e Eventos.
Para realizar a validação de parâmetros você precisa definir a propriedade params na definição da ação e criar um esquema de validação para a ctx.params recebida.
Exemplo
const { ServiceBroker } = require("moleculer");
const broker = new ServiceBroker({ validator: true// Default is true });
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) suporta validadores personalizados assíncronos, o que significa que você pode passar metadados para funções de validador personalizadas. No Moleculer, o FastestValidator passa o ctx como metadados. Isso significa que você pode acessar o context atual, serviço, broker. Isso permite que você faça chamadas assíncronas (por exemplo, chamar outro serviço) em funções de validações personalizadas. Para habilitar isso, você deve definir o useNewCustomCheckerFunction como true em 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; } }, }, /* ... */ } }
Validação de Eventos
A validação dos parâmetros de evento também é suportada. Para habilitá-la, defina params na definição do evento.
Por favor, note que os erros de validação não são enviados de volta para o requisitante, como acontece com os erros de ação. Erros de validação de evento são registrados, mas você também pode recuperá-los com o manipulador de erro global.
Você também pode implementar validadores personalizados. Recomendamos copiar o código fonte de Fastest Validator e implementar os métodos compile e validate.