Last active
July 22, 2019 22:46
-
-
Save bag-man/43ff19786a11108b9dbf2d44ba98ffd8 to your computer and use it in GitHub Desktop.
Connect and use MongoDB with ES6 in Node 4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
const MongoClient = require('mongodb') | |
class Database { | |
constructor (uri) { | |
this.uri = uri | |
this.db = {} | |
return this | |
} | |
connect () { | |
return new Promise((resolve, reject) => { | |
MongoClient.connect(this.uri, (err, db) => { | |
if (err) reject(err) | |
this.db = db | |
resolve(this) | |
}) | |
}) | |
} | |
addReport (domain) { | |
return new Promise((resolve, reject) => { | |
this.db.collection('domains').findAndModify( | |
{ domain: domain } | |
, {} | |
, { $inc: { reported: 1 } } | |
, { new: true, upsert: true } | |
, (err, data) => { | |
if (err) reject(err) | |
resolve(data) | |
}) | |
}) | |
} | |
findReport (domain) { | |
return new Promise((resolve, reject) => { | |
this.db.collection('domains').findOne( | |
{ domain: domain } | |
, { _id: false, reported: true } | |
, (err, data) => { | |
if (err) reject(err) | |
if (data) { | |
resolve(data.reported) | |
} else { | |
resolve(0) | |
} | |
}) | |
}) | |
} | |
} | |
module.exports = Database |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
const Database = require('../database') | |
, dbUrl = process.env.MONGODB_URI || 'mongodb://localhost:27017/test' | |
, assert = require('assert') | |
describe('Database', () => { | |
let database | |
beforeEach((done) => { | |
database = new Database(dbUrl) | |
database.connect() | |
.then(() => { done() }) | |
.catch((err) => { done(err) }) | |
}) | |
afterEach(() => { | |
database.db.dropDatabase() | |
}) | |
it('should add a domain to the database with one report', (done) => { | |
database.addReport('google.com') | |
.then((data) => { | |
assert.equal(data.value.domain, 'google.com', 'domain not inserted') | |
return database.findReport('google.com') | |
}) | |
.then((data) => { | |
assert.equal(data, 1, 'incorrect number of reports') | |
done() | |
}) | |
.catch((err) => { | |
done(err) | |
}) | |
}) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is great! Thank you.