@carlosbajo/roket-micro
Version:
framework para microservicios con google/pubsub
62 lines (55 loc) • 2.15 kB
JavaScript
const mongoose = require('mongoose');
const Boom = require('boom');
const winston = require('winston');
const Redis = require('ioredis');
const { MongoClient } = require('mongodb'); // eslint-disable-line
const fs = require('fs');
console.log(process.env.GOOGLE_APPLICATION_CREDENTIALS);
const fileKey = fs.readFileSync(process.env.GOOGLE_APPLICATION_CREDENTIALS); // eslint-disable-line
const key = JSON.parse(fileKey);
console.log(key);
const isLocal = key.client_email.includes('local');
module.exports = {
connect: (config) => {
let datasource;
const mongoUrl = process.env.MONGO_URL || 'mongo';
const mongod = process.env.MONGO_DATABASE || 'test';
const ssl = process.env.SSL || true;
const replicaSet = process.env.REPLICASET || 'rs0';
const authSource = process.env.AUTHSOURCE || 'admin';
const conMongo = `${mongoUrl}/${mongod}`;
const options = {
useMongoClient: true,
}
const redisUrl = process.env.REDIS_URL || 'redis';
const redisD = process.env.REDIS_DATABASE || '0';
const conRedis = `${redisUrl}/${redisD}`;
switch (config) {
case 'mongo':
winston.info('Mongo complete url', `mongodb://${conMongo}`);
datasource = mongoose.connect(`mongodb://${conMongo}`, options,
(err) => {
if (err) {
throw err;
}
});
break;
case 'redis':
winston.info('Redis complete url', `redis://${conRedis}`);
datasource = new Redis(6379, redisUrl, { connectTimeout: 999999 });
break;
case 'mongoNative':
if (isLocal) {
winston.info('Mongo complete url', `mongodb://${conMongo}`);
datasource = MongoClient.connect(`mongodb://${conMongo}`);
} else {
winston.info('Mongo complete url', `mongodb://${conMongo}?ssl=${ssl}&replicaSet=${replicaSet}&authSource=${authSource}`);
datasource = MongoClient.connect(`mongodb://${conMongo}?ssl=${ssl}&replicaSet=${replicaSet}&authSource=${authSource}`);
}
break;
default:
throw Boom.conflict('No esta ese datasource');
}
return datasource;
}
};