O framework Moleculer possui um conjunto oficial de Adaptadores de Banco de Dados. Use-os para persistir dados em um banco de dados.
Database per serviceMoleculer segue o padrão de * um banco de dados por serviço. Para saber mais sobre esse padrão de desenvolvimento e suas implicações, confira este artigo. Para uma abordagem de *múltiplas entidades/tabelas por serviço verifique FAQ.
Funcionalidades
- ações CRUD padrão
- ações em cache
- suporte a paginação
- adaptador padrão (NeDB é o adaptador em memória padrão para testes & protótipos)
- adaptadores oficiais para MongoDB, PostgreSQL, SQLite, MySQL, MSSQL.
- filtragem de campos
- popular dados de tabelas relacionadas
- codificar/decodificar IDs
- eventos de ciclo de vida da entidade para notificações
Experimente em seu navegador!
Adaptador Base
O adaptador padrão do Moleculer é baseado no NeDB. Use-o para configurar rapidamente e testar seu protótipo.
Use este adaptador somente para prototipagem e teste. Quando você estiver pronto para entrar em produção, simplesmente troque o adaptador para Mongo, Mongoose ou Sequelize já que todos implementam as Configurações, Ações e Métodos em comum.
Instalação
$ npm install moleculer-db --save |
Utilização
; |
Mais exemplos podem ser encontrados no GitHub
Confirgurações
Todos os adaptadores de banco de dados compartilham um conjunto comum de configurações:
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
idField |
String |
obrigatório | Nome do campo ID. |
fields |
Array.<String> |
null |
Lista com os campos a serem filtrados. Deve ser um Array . Se o valor é null ou undefined não filtra campos das entidades. |
populates |
Array |
null |
Esquema para o preenchimento. Leia mais. |
pageSize |
Number |
obrigatório | Tamanho padrão da página em uma ação list . |
maxPageSize |
Number |
obrigatório | Tamanho máximo da página em uma ação list . |
maxLimit |
Number |
obrigatório | Valor máximo do limite na ação find . Padrão: -1 (sem limite) |
entityValidator |
Object , function |
null |
Esquema do validador ou uma função para validar a entrada da entidade nas ações create & ações de ‘inserir’. |
idField
não funciona com o adaptador de Sequelize, pois você pode definir livremente seu próprio ID durante a criação do modelo.
Personalização
Como em todos os mixins, o algoritmo de mesclagem padrão permite que você substitua os padrões aplicados por este mixin. Por exemplo, para desativar uma ação, você pode definir a ação para false
em seu serviço.
Exemplo
; |
Ações
Adaptadores de BD também implementam operações CRUD. Essas ações são métodos públicos
e podem ser chamadas por outros serviços.
find
Encontrar entidades por consulta.
Parâmetros
Propriedade | Tipo | Valor padrão | Descrição |
---|---|---|---|
populate |
Array.<String> |
- | Preenche dados relacionados. |
fields |
Array.<String> |
- | Filtro de campos. |
limit |
Number |
obrigatório | Quantidade máxima de linhas. |
offset |
Number |
obrigatório | Quantidade de linhas ignoradas. |
sort |
String |
obrigatório | Campos para ordenação. |
search |
String |
obrigatório | Pesquisar texto. |
searchFields |
String |
obrigatório | Campos para busca. |
query |
Object |
obrigatório | Objeto de consulta. Transfere para o adaptador. |
Resultados
Tipo: Matriz.<Object>
- Lista de entidades encontradas.
count
Obter contagem de entidades por consulta.
Parâmetros
Propriedade | Tipo | Valor padrão | Descrição |
---|---|---|---|
search |
String |
obrigatório | Pesquisar texto. |
searchFields |
String |
obrigatório | Campos para busca. |
query |
Object |
obrigatório | Objeto de consulta. Transfere para o adaptador. |
Resultados
Tipo: Number
- Contagem de entidades encontradas.
list
Lista entidades com filtros e paginação de resultados.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
populate |
Array.<String> |
- | Preenche dados relacionados. |
fields |
Array.<String> |
- | Filtro de campos. |
page |
Number |
obrigatório | Número da página. |
pageSize |
Number |
obrigatório | Tamanho de uma página. |
sort |
String |
obrigatório | Campos para ordenação. |
search |
String |
obrigatório | Pesquisar texto. |
searchFields |
String |
obrigatório | Campos para busca. |
query |
Object |
obrigatório | Objeto de consulta. Transfere para o adaptador. |
Resultados
Type: Object
- Lista e contagem de entidades encontradas.
create
Criar uma nova entidade.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
- | - | - | - |
Nenhum parâmetro de entrada.
Resultados
Tipo: Object
- Entidade gravada.
insert
Criar muitas entidades novas.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
entity |
Object |
- | Entidade para salvar. |
entities |
Array.<Object> |
- | Entidades para salvar. |
Resultados
Tipo: Object
, Array.<Object>
- Entidade(s) gravada(s).
get
Obter entidade por ID.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
id |
any , Array.<any> |
obrigatório | ID(s) de entidade(s). |
populate |
Array.<String> |
- | Lista de campos para preenchimento. |
fields |
Array.<String> |
- | Filtro de campos. |
mapping |
Boolean |
- | Converta o Array retornado para Objet onde a chave é o valor de id . |
Resultados
Tipo: Objet
, Array.<Object>
- Entidade(s) encontrada(s).
update
Atualizar a entidade por ID.
Após a atualização, limpa o cache & chama os eventos de ciclo de vida.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
- | - | - | - |
Nenhum parâmetro de entrada.
Resultados
Tipo: Object
- Entidade atualizada.
remove
Remove uma entidade por ID.
Parâmetros
Property | Tipo | Padrão | Descrição |
---|---|---|---|
id |
any |
obrigatório | ID da entidade. |
Resultados
Tipo: Number
- Contagem de entidades removidas.
Métodos
Adaptadores de BD também tem um conjunto de métodos auxiliares.
getById
Obter entidade(es) pelo(s) ID(s).
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
id |
String , Number , Array |
obrigatório | ID ou IDs. |
decoding |
Boolean |
obrigatório | É necessário decodificar IDs. |
Resultados
Tipo: Objet
, Array.<Object>
- Entidade(s) encontrada(s).
clearCache
Limpar entidades em cache
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
- | - | - | - |
Nenhum parâmetro de entrada.
Resultados
Tipo: Promise
encodeID
Codificar ID da entidade.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
id |
any |
obrigatório | - |
Resultados
Tipo: any
decodeID
Decodificar ID da entidade.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
id |
any |
obrigatório | - |
Resultados
Tipo: any
_find
Encontrar entidades por consulta.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
populate |
Array.<String> |
- | Preenche dados relacionados. |
fields |
Array.<String> |
- | Filtro de campos. |
limit |
Number |
obrigatório | Quantidade máxima de linhas. |
offset |
Number |
obrigatório | Quantidade de linhas ignoradas. |
sort |
String |
obrigatório | Campos para ordenação. |
search |
String |
obrigatório | Pesquisar texto. |
searchFields |
String |
obrigatório | Campos para busca. |
query |
Object |
obrigatório | Objeto de consulta. Transfere para o adaptador. |
Resultados
Tipo: Array.<Object>
Lista de entidades encontradas.
_count
Obter contagem de entidades por consulta.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
search |
String |
obrigatório | Pesquisar texto. |
searchFields |
String |
obrigatório | Campos para busca. |
query |
Object |
obrigatório | Objeto de consulta. Transfere para o adaptador. |
Resultados
Tipo: Number
Contagem de entidades encontradas.
_list
Lista entidades com filtros e paginação de resultados.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
populate |
Array.<String> |
- | Preenche dados relacionados. |
fields |
Array.<String> |
- | Filtro de campos. |
page |
Number |
obrigatório | Número da página. |
pageSize |
Number |
obrigatório | Tamanho de uma página. |
sort |
String |
obrigatório | Campos para ordenação. |
search |
String |
obrigatório | Pesquisar texto. |
searchFields |
String |
obrigatório | Campos para busca. |
query |
Object |
obrigatório | Objeto de consulta. Transfere para o adaptador. |
Resultados
Tipo: Object
Lista e contagem de entidades encontradas.
_create
Criar uma nova entidade.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
params |
Object |
- | Entidade para salvar. |
Resultados
Tipo: Object
Entidade salva.
_insert
Criar muitas entidades novas.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
entity |
Object |
- | Entidade para salvar. |
entities |
Array.<Object> |
- | Entidades para salvar. |
Resultados
Tipo: Object
, Array.<Object>
Entidade(s) gravada(s).
_get
Obter entidade por ID.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
id |
any , Array.<any> |
obrigatório | ID(s) de entidade(s). |
populate |
Array.<String> |
- | Lista de campos para preenchimento. |
fields |
Array.<String> |
- | Filtro de campos. |
mapping |
Boolean |
- | Converta o Array retornado para Objet onde a chave é o valor de id . |
Resultados
Tipo: Object
, Array.<Object>
Entidade(s) encontrada(s).
_update
Atualizar a entidade por ID.
Após a atualização, limpa o cache & chama os eventos de ciclo de vida.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
params |
Object |
- | Entidade para atualizar. |
Resultados
Tipo: Object
Entidade atualizada.
_remove
Remove uma entidade por ID.
Parâmetros
Propriedade | Tipo | Padrão | Descrição |
---|---|---|---|
id |
any |
obrigatório | ID da entidade. |
Resultados
Tipo: Number
Contagem de entidades removidas.
Manipulação de dados
Você pode usar facilmente hooks de ação para modificar (por exemplo, adicionar timestamps, codificar senhas do usuário ou remover informações confidenciais) antes ou depois de salvar os dados no banco de dados. Hooks só serão executados antes ou após ações. Se você precisar executar suas manipulações de dados antes ou após os métodos this._create(), this._update() ou this._remove(), você pode usar os Eventos do ciclo de vida
Exemplo de hooks adicionando um timestamp e removendo dados confidenciais
; |
Popular dados de tabelas relacionadas
O serviço permite preencher facilmente os campos de outros serviços. Por exemplo: se você tem um campo autor
na entidade post
, você pode preencher com o serviço usuários
usando o ID do autor. Se o campo é um Array
de IDs, ele irá preencher todas as entidades através de apenas uma solicitação
Exemplo de esquema de preenchimento
broker.createService({ |
A população recursiva também é suportada. Por exemplo, se o serviço de usuários preencher um campo grupo:
broker.createService({ |
Então você pode preencher o grupo de um autor de publicação ou quem curtiu dessa forma:
//Recursive population |
O parâmetro
populate
está disponível nas açõesfind
,list
eget
.
Ciclo de vida de uma entidade
Há 6 eventos do ciclo de vida que são chamados quando as entidades são manipuladas.
broker.createService({ |
Por favor, note! Se você manipular várias entidades (updateMany, removeMany), o parâmetro
json
será umnumber
em vez de entidades!
Estender com ações personalizadas
Naturalmente você pode estender este serviço com suas ações personalizadas.
const DbService = require("moleculer-db"); |
Adaptador Mongo
Este adaptador é baseado no MongoDB.
Instalação
$ npm install moleculer-db moleculer-db-adapter-mongo --save |
DependenciesPara usar este adaptador, você precisa instalar o MongoDB no seu sistema.
Utilização
; |
Opções
Exemplo com URI de conexão
new MongoDBAdapter("mongodb://localhost/moleculer-db") |
Exemplo com URI de conexão & opções
new MongoDBAdapter("mongodb://db-server-hostname/my-db", { |
Mais exemplos MongoDB podem ser encontrados no GitHub
Adaptador Mongoose
Este adaptador é baseado em Mongoose.
Instalação
$ npm install moleculer-db moleculer-db-adapter-mongoose mongoose --save |
DependenciesPara usar este adaptador, você precisa instalar o MongoDB no seu sistema.
Utilização
; |
Opções
Exemplo com URI de conexão
new MongooseAdapter("mongodb://localhost/moleculer-db") |
Exemplo com URI e opções
new MongooseAdapter("mongodb://db-server-hostname/my-db", { |
Conectar a vários DBs
Se seus serviços estão sendo executados em nós separados e você deseja conectar-se a vários bancos de dados, então você pode usar o model
na sua definição de serviço. Por outro lado, se os seus serviços estão rodando em um único nó e você deseja conectar-se a vários bancos de dados, você deve definir o schema
que fará várias conexões para você.
Mais exemplos de Mongoose podem ser encontrados no GitHub
Adaptador Sequelize
Adapter SQL (Postgres, MySQL, SQLite & MSSQL) para o serviço de BD Moleculer com Sequelize.
Instalação
$ npm install moleculer-db-adapter-sequelize --save |
Você tem que instalar pacotes adicionais para o servidor de banco de dados:
# Para SQLite |
Utilização
; |
Opções
Todos os argumentos de construtor são passados para o construtor Sequelize
. Leia mais sobre a conexão Sequelize.
Exemplo com URI de conexão
new SqlAdapter("postgres://user:[email protected]:5432/dbname"); |
Exemplo com as opções de conexão
new SqlAdapter('database', 'username', 'password', { |
Mais exemplos de Sequelize podem ser encontrados no GitHub