Um simples exemplo de múltiplas conexões utilizando NodeJS com ExpressJS e mongoose.
Nesse exemplo teremos uma base de dados onde vão estar as informações das conexões disponíveis, e para setar qual conexão vamos utilizar, passaremos um parâmetro via header chamado customerid.
Certifique-se de ter o git, NodeJS e MongoDB instalados.
- Clone o repositório
- Após ter clonado, instale suas dependências utilizando o comando:
$ npm install
- Instale o pacote nodemon globalmente utilizando o comando:
$ npm install -g nodemon
- Inicie o projeto utilizando o comando:
$ npm start
- Seu servidor vai estar disponível no endereço http://localhost:3000
Abra o console do MongoDB e adicione esses três clientes na base de dados:
use dbmaster;
db.customers.save( { db_name: 'db01', connection_name: 'db01' } );
db.customers.save( { db_name: 'db02', connection_name: 'db02' } );
db.customers.save( { db_name: 'db03', connection_name: 'db03' } );
Feito isso, vamos executar o comando para listar o que acabou de ser inserido, e vamos guardar os ID's gerados pelo MongoDB.
db.customers.find().pretty();
O resultado obtido é:
{
"_id" : ObjectId("5bd85b40f81b7ecfc409bdca"),
"db_name" : "db01",
"connection_name" : "db01"
}
{
"_id" : ObjectId("5bd85b40f81b7ecfc409bdcb"),
"db_name" : "db02",
"connection_name" : "db02"
}
{
"_id" : ObjectId("5bd85b41f81b7ecfc409bdcc"),
"db_name" : "db03",
"connection_name" : "db03"
}
Após inserirmos os clientes acima, vamos incluir dados para cada cliente, passando o id do cliente pelo cabeçalho da requisição. O id do cliente são os que foram gerados automaticamente pelo MongoDB. Utilizaremos o console do Google Chrome para realizar essas requisições, lembrando que teremos que ter o plugin do jQuery disponível para realizar os comandos abaixo.
- Inserindo um dado em um determinado cliente:
Cliente 01
$.ajax({
method: 'POST',
url: 'http://localhost:3000/api/v1/board',
headers: { customerid: '5bd85b40f81b7ecfc409bdca' },
data: { title: 'Board 01 da Empresa 01' }
}).done(function (r) {
console.log(r);
});
Cliente 02
$.ajax({
method: 'POST',
url: 'http://localhost:3000/api/v1/board',
headers: { customerid: '5bd85b40f81b7ecfc409bdcb' },
data: { title: 'Board 01 da Empresa 02' }
}).done(function (r) {
console.log(r);
});
Cliente 03
$.ajax({
method: 'POST',
url: 'http://localhost:3000/api/v1/board',
headers: { customerid: '5bd85b41f81b7ecfc409bdcc' },
data: { title: 'Board 01 da Empresa 03' }
}).done(function (r) {
console.log(r);
});
Note que para cada requisição eu passei um customerid diferente no header, que são referentes aos ids dos clientes.
Agora vamos consultar no MongoDB quantas bases temos criadas lá utilizando o comando:
show dbs;
O Resultado obtido é:
admin 0.000GB
config 0.000GB
db01 0.000GB // Criado conforme o ID Passado
db02 0.000GB // Criado conforme o ID Passado
db03 0.000GB // Criado conforme o ID Passado
dbmaster 0.000GB
local 0.000GB
Agora vamos requisitar os dados conforme o ID do cliente passado pelo header da requisição.
Cliente 01
$.ajax({
method: 'GET',
url: 'http://localhost:3000/api/v1/board',
headers: { customerid: '5bd85b40f81b7ecfc409bdca' }
}).done(function (r) {
console.log(r);
});
Cliente 02
$.ajax({
method: 'GET',
url: 'http://localhost:3000/api/v1/board',
headers: { customerid: '5bd85b40f81b7ecfc409bdcb' }
}).done(function (r) {
console.log(r);
});
Cliente 03
$.ajax({
method: 'GET',
url: 'http://localhost:3000/api/v1/board',
headers: { customerid: '5bd85b41f81b7ecfc409bdcc' }
}).done(function (r) {
console.log(r);
});
Note que para cada consulta, ele trouxe 1 registro, pois ele está conectando em bases diferentes conforme o ID do cliente passado. Lembrando que este é um simples exemplo, está faltando algumas validações, como verificar se o ID de cliente existe antes de continuar, causando erro na aplicação.