Node Dao 레이어의 패키지 및 페이지 나누기

5178 단어
전통적인 서법
/**
 * Created by    on 2017/7/22.
 */
var express = require('express');
var app = express();
var MongoClient = require('mongodb').MongoClient;



app.get('/',function (req,res) {
    // Connection URL
    var url = 'mongodb://localhost:27017/database';

    MongoClient.connect(url, function(err, db) {
        if(err){
            console.log("       ")
        }
        console.log("       ");
        //    
        db.collection('student').insertOne({
            "name":"hahah",
            "age":"100"
        },function (err,result) {
            console.log(result);
            res.send("      :"+result);
            db.close();
        });


    });
});
app.listen(3000);

이렇게 하면 우리는 사용자가 매번 조작할 때 순서대로 데이터베이스에 연결해야 한다는 것을 알 수 있다. 이렇게 하면 효율이 매우 낮기 때문에 우리는 데이터베이스의 삭제와 수정을 하나의 모듈로 봉하여 이 모듈을db라고 명명한다.js Dao 레이어 캡슐화: db.js 1, 몬godb 도입
var MongoClient = require('mongodb').MongoClient;

2. 데이터베이스 연결

//     
function _connectDB(callback) {
    // Connection URL
    var url = 'mongodb://localhost:27017/database';

    MongoClient.connect(url, function (err, db) {
        console.log("       ");
        if(err){
            callback(err,null);
            return;
        }
        callback(err, db);
    });
}

3. 포장 방법
  • 데이터 삽입
  • //     
    exports.insertOne = function (collectionName, json, callback) {
        _connectDB(function (err, db) {
            db.collection(collectionName).insertOne(json, function (err, result) {
                callback(err, result);
                db.close();
            })
        })
    };
    
  • 데이터 찾기
  • //     
    exports.find = function (collectionName, json, callback) {
        var result = [];   //       
        if (arguments.length != 3) {
            callback("find      ", null);
            return;
        }
        _connectDB(function (err, db) {
            var cursor = db.collection(collectionName).find(json);
            cursor.each(function (err, doc) {
                if (err) {
                    callback(err, null);
                    db.close();
                    return;
                }
                if (doc != null) {
                    result.push(doc);   //       
                } else {
                    //    
                    callback(null, result);
                    db.close();
                }
            })
    
        })
    };
    
  • 페이지 조회mongo는 페이지 조회를 할 때 db.student.find().skip().limit(); find()이 검색 조건이고 skip()은 생략된 항목이고 limit()은 읽는 항목이고 limitskip이 함께 사용하면 페이지 조회이다.총 데이터 쓰기 방법:
  • db.student.find().count()
    db.student.stats().count;
    

    예: 첫 페이지는 페이지=0입니다.페이지당 10개이기 때문에 현재 페이지의 조회문:
    db.student.find({}).limit(10).skip(page*10)
    

    그래서 페이지 나누기 조회가 봉인된 함수는 다음과 같다.
    //     ,args     {"pageamount":2,"page":page}
    exports.find = function (collectionName, json, C,D) {
        var result = [];   //       
        if (arguments.length == 3) {
            var callback = C;
            var skip = 0;
            var limit = 0;
        }else if(arguments.length==4){
            var callback = D;
            var args = C;
            //       
            var skip = args.pageamount*args.page||0;
            //     
            var limit = args.pageamount||0;
           //   
            var sort = args.sort||{}
        }else{
            throw new Error("find             ");
            return;
        }
        _connectDB(function (err, db) {
           var cursor = db.collection(collectionName).find(json).skip(skip).limit(limit).sort(sort);
            cursor.each(function (err, doc) {
                if (err) {
                    callback(err, null);
                    db.close();
                    return;
                }
                if (doc != null) {
                    result.push(doc);   //       
                } else {
                    //    
                    callback(null, result);
                    db.close();
                }
            })
    
        })
    };
    

    호출하러 갔을 때:
    app.get("/find",function (req,res) {
        var page =parseInt(req.query.page);
       db.find("student",{},{"pageamount":2,"page":page},{"sort":{"shijian":-1}},function (err,result) {
           if(err){
               console.log("    ")
           }
           res.send(result);
       })
    });
    
  • 수정 데이터
  • //  
    exports.updateMany = function (collectionName, json1, json2, callback) {
        _connectDB(function (err, db) {
            db.collection(collectionName).updateMany(
                json1,
                json2,
                function (err, results) {
                    callback(err, results);
                    db.close();
                });
        })
    };
    
  • 데이터 삭제
  • //   
    exports.deleteMany = function (collectionName, json, callback) {
        _connectDB(function (err, db) {
            db.collection(collectionName).deleteMany(json, function (err, result) {
                callback(result.length);
                db.close();
            })
        })
    };
    

    좋은 웹페이지 즐겨찾기