UNPKG

1.1 kBJavaScriptView Raw
1'use strict';
2
3const mongoose = require('mongoose');
4
5const getMongoUri = ({
6 url, servers, host, port, username, password, authSource,
7}) => {
8 if (url)
9 return url;
10
11 const member = (servers || [{ host, port }]).map(m => `${m.host}:${m.port}`);
12 const auth = (username && password) ? `${username}:${password}` : '';
13 const options = authSource ? `?authSource=${authSource}` : '';
14
15 return `mongodb://${auth}${member}/${options}`;
16};
17
18let connection = null;
19
20module.exports = {
21 type: 'mongoose',
22 connect: async ({ mongodb }, dbName) => {
23 if (!dbName)
24 throw new Error('Mongoose connection requiers dbName');
25
26 if (!connection) {
27 mongoose.set('useNewUrlParser', true);
28 mongoose.set('useFindAndModify', false);
29 mongoose.set('useCreateIndex', true);
30 mongoose.connect(getMongoUri(mongodb), { dbName });
31 connection = mongoose.connection; // eslint-disable-line
32 return connection;
33 }
34
35 return connection.useDb(dbName);
36 },
37 async close() {
38 if (!connection)
39 return;
40 connection = null;
41 const closingConnection = connection;
42 await closingConnection.close();
43 },
44};