nodejs中将mongodb全局挂载,使用完后不在close

 直接上代码,封装mongo文件。然后再app.js 中引用

// mongodb 操作包
const mongodb = require('mongodb').MongoClient;
const ObjectId = require('mongodb').ObjectId
//配置文件
const config = require('./config/index');

// 根据状态判断是否有用户名
let state = null;

if (!!config.username && !!config.password) {// 有用户名密码
    state = true;
} else {// 没有用户名密码
    state = false;
};

// 定义基本类
class app {
    //默认初始化执行方法
    constructor() {
        // 存放mongodb连接后的对象
        this.dbClient = '';
    };

    // 连接
    connect() {
        if (state) {// 有用户名密码
            return new Promise((resolve, reject) => {
                if (!this.dbClient) {
                    mongodb.connect('mongodb://' + config.username + ':' + config.password + '@' + config.address + ':' + config.port + '/', {
                        useNewUrlParser: true
                    }, (err, client) => {
                        if (!err) {
                            this.dbClient = client.db(config.database);
                            resolve(this.dbClient);
                        } else {
                            reject(err);
                        };
                    });
                } else {
                    resolve(this.dbClient);
                };
            });
        } else {// 没有用户名密码
            return new Promise((resolve, reject) => {
                if (!this.dbClient) {
                    let url = `mongodb://${config.address}:${config.port}/`
                    mongodb.connect(url, { useNewUrlParser: true }, (err, client) => {
                        if (!err) {
                            this.dbClient = client.db(config.database);
                            resolve(this.dbClient);
                        } else {
                            reject(err);
                        };
                    });
                } else {
                    resolve(this.dbClient);
                };
            });
        };
    };

    // 添加
    add(tableName, json) {
        return new Promise((resolve, reject) => {
            this.connect().then(db => {
                db.collection(tableName).insert(json, (err, result) => {
                    if (!err) {
                        resolve(result);
                        return;
                    };
                    reject(err);
                });
            });
        });
    };

    // 删除---_id
    deleteId(tableName, json) {
        return new Promise((resolve, reject) => {
            this.connect().then(db => {
                let params = {
                    _id: ObjectId(json._id)
                }
                db.collection(tableName).findOneAndDelete(params, (err, result) => {
                    if (!err) {
                        resolve(result);
                        return;
                    };
                    reject(err);
                });
            });
        });
    };

    // 删除
    remove(tableName, json) {
        return new Promise((resolve, reject) => {
            this.connect().then(db => {
                console.log(json);
                db.collection(tableName).remove(json, (err, result) => {
                    if (!err) {
                        resolve(result);
                        return;
                    };
                    reject(err);
                });
            });
        });
    };

    // 更新
    update(tableName, condition, json) {
        return new Promise((resolve, reject) => {
            this.connect().then(db => {
                db.collection(tableName).updateOne(condition, {
                    $set: json
                }, (err, result) => {
                    if (!err) {
                        resolve(result);
                        return;
                    };
                    reject(err);
                });
            });
        });
    };

    // 查询--定向查询
    find(tableName, json) {
        return new Promise((resolve, reject) => {
            this.connect().then(db => {
                db.collection(tableName).findOne(json, (err, data) => {
                    if (!err) {
                        resolve(data);
                        return;
                    }
                    reject(err);
                });
            });
        });
    };

    //分页查询  条件conditions
    findPage(tableName, { pageNo = 1, pageSize = 10, _sort, ...conditions }) {
        return new Promise((resolve, reject) => {
            this.connect().then(db => {
                let cDb = db.collection(tableName)
                //分页数据
                let result = cDb
                    .find(conditions)
                    .skip((pageNo - 1) * pageSize)
                    .limit(Number(pageSize))
                    .sort(_sort)

                //分页总数
                cDb.count(conditions).then(count => {
                    result.toArray((err, list) => {
                        if (!err) {
                            resolve({ list, count });
                            return;
                        }
                        reject(err);
                    });
                }).catch(err => {
                    reject(err);
                })

            });
        });
    }
};

// 导出模块
module.exports = app

app.js中引用挂载到全局上

//链接数据库
let dbClass = require('./mongodb/index')
let db = new dbClass()
db.connect().then(_ => {
  //链接成功后挂载到全局对象上
  global.db = db
})

然后再接口中使用:

const router = require('./config/index')
//token创建
const Jwt = require('../utils/token/index')
/* 账号接口 */
let tables = 'account'
/*
* desc 账号密码是否正确
* params ${account、password}
* return ${}
*/
router.post('/account/login', function (req, res, next) {
    let { account, password } = req.body
    global.db.find(tables, { account }).then(data => {
        if (data) {
            //有账号
            if (data.password != password) {
                res.send(global.fail({}, '密码不正确'))
            } else {
                let token = new Jwt(data._id).generateToken()
                let sendData = {
                    userId: data._id,
                    token: token
                }
                res.send(global.success(sendData, '登录成功'))
            }
        } else {
            res.send(global.fail({}, '账号不存在'))
        }
    })
});

/*
* desc 获取用户信息-权限等
* params ${userId}
* return ${}
*/
router.get('/account/userInfo', function (req, res, next) {
    let userId = req.query.userId
    global.db.find(tables, { userId }).then(data => {
        res.send(global.success(data, '查询数据成功'))
    })
});

/*
* desc 新增账号
* params ${ account, password }
* return ${}
*/
router.post('/account/addAccount', async function (req, res, next) {
    let db = global.db
    let { account, password } = req.body
    let data = await db.find(tables, { account })

    if (data) {
        res.send(success({}, '账号已存在'))
        return
    }
    db.add(tables, { account, password }).then(data => {
        res.send(success(data, '新增数据成功'))
    })
});

/*
* desc 删除账号
* params ${userId}
* return ${}
*/
router.post('/account/removeAccount', function (req, res, next) {
    let { userId } = req.body
    db.deleteId(tables, { _id: userId }).then(data => {
        res.send(success(data, '删除数据成功'))
    })
});

module.exports = router;

git代码:

 https://gitee.com/shiyishengbaby/nodejs-express-mongodb.git

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值