The method of packaging nodejs mongodb

Introducing mogodb package sorting and paging table query

//1.引入mongodb客户端包
const mongodb = require("mongodb")
const express = require("express")
let app = express()
app.listen(3000,()=>console.log("server is running....."))

//创建接口
app.get("/api/user",(req,res,next)=>{
    //获取参数
    let {_page,_limit} = req.query;
    // console.log("_page",typeof _page)
    // console.log("_limit",typeof _limit)
    const mongoCt = mongodb.MongoClient;//创建实例
    mongoCt.connect('mongodb://127.0.0.1:27017',{ useUnifiedTopology: true },(err,client)=>{
        if(!err){
            //4.链接库
            let db = client.db("student")
            //5. 链接集合user
            let user = db.collection("user")
            //排序与分页
            user.find({},{
                skip:(_page-1)*_limit-0,
                limit:_limit-0,
                sort:{age:1,_id:-1}
            }).toArray((err,result)=>{ 
                res.send({
                    err:0,
                    data:result
                }) 
            }) 
        }else{
            console.log("库链接失败...",err)
        }
    })
})

Package mongodb

Mongodb conduct their own package 库的链接:open, 查询库集合列表数据:findList, 根据动态id获取详情数据:findDetail.
app.js:

//1.引入mongodb客户端包
// const mongodb = require("mongodb")
const express = require("express")
let app = express()
//引入封装的mongodb
let mongodb = require("./mongodb")
app.listen(3000,()=>console.log("server is running....."))



//创建接口 open
app.get("/api/user",(req,res,next)=>{
    //对象的解构赋值操作
    let {_page,_limit} = req.query;
    
    mongodb.open({
        collectionName:"user"
    }).then(({collection,client})=>{
        collection.find({},{
            skip:(_page-1)*_limit-0,
            limit:_limit-0,
            sort:{age:1,_id:-1}
        }).toArray((err,result)=>{ 
            res.send({
                err:0,
                data:result
            }) 
            //注意位置,关闭库
            client.close()
        }) 
    }).catch(err=>{
        //处理err了....
        console.log("err",err)
    })
    
})

//创建接口 findList
app.get("/api/user",(req,res,next)=>{
    //对象的解构赋值操作
    let {_page,_limit,_sort,q} = req.query;
    _page = _page - 1
    _limit = _limit - 0
    _sort = _sort || 'age'


    mongodb.findList({
        collectionName:"user",
        _page,_limit,_sort,q
    }).then(result=>{
        res.send(result)
    }).catch(err=>{
        res.send(err)
    })
    
})


//查询详情 findDetail
app.get("/api/user/:_id",(req,res,next)=>{
    //获取参数
    let {_id} = req.params
    mongodb.findDetail({
       collectionName:"user",
       _id
    }).then(result=>res.send(result))
    .catch(err=>res.send(err))
})

mongodb.js Package:

let mongodb = require("mongodb")
let mongodCt = mongodb.MongoClient
let ObjectId =  mongodb.ObjectId //把字符串转成ObjectId的对象类型
//链接库
/*
    dbName:数据库名称 默认值就是student
    collectionName:集合名字
    url:链接的url地址
*/
let open = ({dbName='student',collectionName,url="mongodb://127.0.0.1:27017"})=>{
    return new Promise((resolve,reject)=>{
        mongodCt.connect(url,{useUnifiedTopology: true},(err,client)=>{
            if(err){
                reject(err)
            }else{
                let db = client.db(dbName)
                let collection = db.collection(collectionName)
                resolve({collection,client})
            }
        })
    })
}

//查询库集合列表数据
let findList = ({
    collectionName,//集合名字
    dbName='student',//默认指明的数据库的名字
    _page,_limit,_sort,q
})=>{

    //生成检索条件
    let rule = q ? {username:new RegExp(q,'g')} : {}   //张三  张三丰   
    // let rule = q ? {username:eval('/'+q+"/")} : {}

    return new Promise((resolve,reject)=>{
        //链接数据库
        open({dbName,collectionName})
            .then(({collection,client})=>{
                //查询列表
                collection.find(rule,{
                    skip:_page*_limit,//跳过多少条数据
                    limit:_limit,//限定每一页的数量
                    sort:{[_sort]:1} //排序字段_sort  当一个变量作为key使用的时候,需要采用[]的语法
                }).toArray((err,result)=>{
                    if(!err && result.length>0){
                        resolve({err:0,data:result})
                    }else{
                        resolve({err:1,msg:"查无数据..."})
                    }
                    //关闭资源
                    client.close()
                })
            })
            .catch(err=>{ //链接数据库失败
                reject({err:1,msg:"数据库链接失败...."})
            })
    })
}


//根据动态id获取详情数据
let findDetail = ({
    dbName="student",//默认查询的数据库名字
    collectionName,//集合名字
    _id=null  //外面传入的_id 
})=>{
    return new Promise((resolve,reject)=>{
        //链库操作
        open({dbName,collectionName})
            .then(({collection,client})=>{
                //查询
                if(_id.length === 24){
                    collection.find({_id:ObjectId(_id)}).toArray((err,data)=>{   
                        //返回结果 
                        if(!err && data.length>0){
                            resolve({err:0,data:data[0]}) //因为result是一个数组,里面仅仅包含一条数据
                        }else{
                            resolve({err:1,msg:"查询不到数据...."})
                        }
                    })
                }else{
                    reject({err:1,msg:"id长度有误..."})
                }
            })
            .catch(err=>reject({err:1,msg:"链接数据库失败...."}))
    })
}



exports.open = open;  //{open:函数}
exports.findList = findList;  
exports.findDetail = findDetail;  
Published 21 original articles · won praise 0 · Views 298

Guess you like

Origin blog.csdn.net/weixin_43861707/article/details/104909756