node.js连接mysql4.0_在Node.js 4中使用ES6连接MongoDB

在Node.js 4中使用ES6连接MongoDB

Javascript 6/ES6逐渐普遍以及Node.js 4.0版本的发布,我们可能需要使用全新方式编写Node.js代码,使用ES6中异步Promise对数据库进行异步连接,这里以MongoDB为案例。

'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

下面是对上述数据库操作测试的代码:

'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)

})

})

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值