0
点赞
收藏
分享

微信扫一扫

Node.js(四):封装MongoDB类库


上代码

// config/API.js
const API = {
db: {
db_url: 'mongodb://admin:123456@192.168.113.136:27017',
db_test: {
db_name: 'test',
t_user: 'user'
}
}
};

module.exports = API;

// utils/mongo-util.js
const {MongoClient} = require('mongodb');

const API = require('../config/API');

class Db {

dbClient = null;

dbUrl;

dbName;

/**
* 单例 用于保存数据库对象
* @param dbUrl 数据库连接地址
* @param dbName 库名
* @returns {Db} 数据库对象
*/
static getInstance(dbUrl, dbName) {

if (!Db.instance) {
Db.instance = new Db(dbUrl, dbName);
}

return Db.instance;

}

constructor(dbUrl, dbName) {

this.dbUrl = dbUrl;

this.dbName = dbName;

this.connect();

}

/**
* 连接数据库
*/
connect() {

return new Promise((resolve, reject) => {

if (this.dbClient) {

resolve(this.dbClient);

}

MongoClient.connect(this.dbUrl, {useUnifiedTopology: true}, (err, client) => {

if (err) {
reject(err);
}

this.dbClient = client.db(this.dbName);

resolve(this.dbClient);

});

});

}

/**
*
* @param tablename 表明
* @param json 查询条件
* @returns {Promise<object>} 数据
*/
find(tablename, json) {

return new Promise((resolve, reject) => {

this.connect()
.then(db => {

const result = db.collection(tablename).find(json);

result.toArray((err, data) => {

if (err) {
reject(err);
}

resolve(data);

});

})
.catch(err => {

reject(err);

});

});


}

/**
* 删除数据
* @param tablename 表名
* @param json 删除条件
* @returns {Promise<object>} 是否成功
*/
deleteOne(tablename, json) {

return new Promise((resolve, reject) => {

this.connect()
.then(db => {

db.collection(tablename).deleteOne(json, (err, data) => {

if (err) {
reject(err);
}

resolve(data);

});

})
.catch(err => {

reject(err);

});

});

}

/**
* 插入数据
* @param tablename 表名
* @param json 插入的数据
* @returns {Promise<object>} 是否成功
*/
insertOne(tablename, json) {

return new Promise((resolve, reject) => {

this.connect()
.then(db => {

db.collection(tablename).insertOne(json, (err, data) => {

if (err) {
reject(err);
}

resolve(data);

});

})
.catch(err => {

reject(err);

});

});

}

/**
* 修改数据
* @param tablename 表名
* @param qjson 查询条件
* @param json 进行修改
* @returns {Promise<any>} 是否成功
*/
updateOne(tablename, qjson, json) {

return new Promise((resolve, reject) => {

this.connect()
.then(db => {

db.collection(tablename).updateOne(qjson, json, (err, data) => {

if (err) {
reject(err);
}

resolve(data);

});

})
.catch(err => {

reject(err);

});

});

}

}

module.exports = Db.getInstance(API.db.db_url, API.db.db_test.db_name);

调用方法

var funA = async ctx => {

console.time('start'); // 查看耗时

let data = await DB.find('user', {});

console.timeEnd('start'); // 查看耗时

}

funA(); // start: 5.905ms


举报

相关推荐

0 条评论