Skip to content

Instantly share code, notes, and snippets.

@ycmjason
Created June 27, 2018 21:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ycmjason/404c7005cace89b1ab59b10310d6637c to your computer and use it in GitHub Desktop.
Save ycmjason/404c7005cace89b1ab59b10310d6637c to your computer and use it in GitHub Desktop.
A neat way to interact with mongoclient, without caring too many proxies.
const MongoClient = require('mongodb').MongoClient;
const DB_NAME = 'mydb';
const MONGO_URL = process.env.MONGO_URL;
const dbPromise = MongoClient.connect(
MONGO_URL,
{ useNewUrlParser: true },
).then(client => client.db(DB_NAME));
// if anything went wrong connecting db
dbPromise.catch(e => {
console.error(e);
console.error('Cannot connect to mongodb...');
process.exit(1);
});
module.exports = new Proxy({}, {
get(target, collectionName) {
return new Proxy({}, {
get(target, methodName) {
return async (...args) => {
const collection = await dbPromise.then(db => db.collection(collectionName));
return collection[methodName](...args);
};
},
});
},
});
@ycmjason
Copy link
Author

The main advantage of this script is you won't need to worry about all the intermediate promises but only focus on the actual operation u wanna perform
Example usage:

Without this script:

MongoClient.connect('some mongo url').then(client => {
  client.db('some db name').then(db => {
    db.collection('some collection name').then(collection => {
      collection.insertOne({...});
    });
  });
});

With this script:

const db = require('./db.js');

db.members.insertOne({
  name: 'Jason Yu'
}).then(...);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment