Express+MongoDB步步爲'贏'

前奏

Express 是什麼?html

Express 是一個基於 Node.js 平臺的極簡、靈活的 web 應用開發框架,它提供一系列強大的特性,幫助你建立各類 Web 和移動設備應用。git

全局安裝express腳手架github

$ npm install express-generator -g

建立express項目web

$ express myapp
$ cd myapp
$ npm install
$ DEBUG=myapp npm start

MongoDB與Mongoose?mongodb

  • MongoDB是一個對象數據庫,是用來存儲數據的;存儲的數據格式爲JSON。數據庫

  • Mongoose是封裝了MongoDB操做(增刪改查等)的一個對象模型庫,是用來操做這些數據的。express

安裝MongoDB:
https://www.mongodb.com/download-center?jmp=navnpm

安裝Mongoose:api

$ npm install mongoose --save

1、鏈接MongoDB

在項目根目錄下新建/lib/mongo.jsbash

var mongoose = require("mongoose");

var db = mongoose.connect('mongodb://localhost:27017/myblog');

module.exports = db

要鏈接的數據庫爲myblog

2、Schema

一種以文件形式存儲的數據庫模型骨架,沒法直接通往數據庫端,不具有對數據庫的操做能力,僅僅只是數據庫模型在程序片斷中的一種表現,能夠說是數據屬性模型(傳統意義的表結構),又或着是「集合」的模型骨架

新建一個用戶Schema

在項目根目錄下新建/models/users.js

var mongoose = require("mongoose");
var db = require('../lib/mongo');
//一個用戶模型
var UserSchema = new mongoose.Schema({
    username    : { type:String },
    password    : {type: String},
    avatar      : {type: String},
    age         : { type:Number, default:0 },
    description : { type: String},
    email       : { type: String },
    github      : { type: String },
    time        : { type:Date, default:Date.now }
});
//建立Model
var UserModel = db.model("user", UserSchema );
module.exports = UserModel
  • user:數據庫中的集合名稱,當咱們對其添加數據時若是user已經存在,則會保存到其目錄下,若是不存在,則會建立user集合,而後在保存數據。

  • 擁有了Model,咱們也就擁有了操做數據庫的金鑰匙,就可使用Model來進行增刪改查的具體操做。

Entity

由Model建立的實體,使用save方法保存數據,Model和Entity都有能影響數據庫的操做,但Model比Entity更具操做性。

var UserEntity = new UserModel({
    name : "hzzly",
    age  : 21,
    email: "hjingren@aliyun.com",
    github: 'https://github.com/hzzly'
});
UserEntity.save(function(error,doc){
    if(error){
        console.log("error :" + error);
    }else{
        console.log(doc);
    }
});

3、封裝數據庫的CURD

  • 在lib文件下新建api.js

  • 採用Promise封裝對數據庫的操做,避免回調地獄,使得代碼可以更好的被讀懂和維護。

var UserModel = require('../models/users');

module.exports = {
    /**
     * 添加數據
     * @param  {[type]} data 須要保存的數據對象
     */
    save(data) {
        return new Promise((resolve, reject) => {
            //model.create(保存的對象,callback)
            UserModel.create(data, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    find(data={}, fields=null, options={}) {
        return new Promise((resolve, reject) => {
            //model.find(須要查找的對象(若是爲空,則查找到全部數據), 屬性過濾對象[可選參數], options[可選參數], callback)
            UserModel.find(data, fields, options, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    findOne(data) {
        return new Promise((resolve, reject) => {
            //model.findOne(須要查找的對象,callback)
            UserModel.findOne(data, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    findById(data) {
        return new Promise((resolve, reject) => {
            //model.findById(須要查找的id對象 ,callback)
            UserModel.findById(data, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    update(conditions, update) {
        return new Promise((resolve, reject) => {
            //model.update(查詢條件,更新對象,callback)
            UserModel.update(conditions, update, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    },
    remove(conditions) {
        return new Promise((resolve, reject) => {
            //model.update(查詢條件,callback)
            UserModel.remove(conditions, (error, doc) => {
                if(error){
                    reject(error)
                }else{
                    resolve(doc)
                }
            })
        })
    }
}

4、使用

在/routers/index.js中使用

var api = require('../lib/api');

router.post('/login', function(req, res, next) {
    var user = {
        username : req.body.username,
        password: req.body.password
    };
    api.findOne(user)
        .then(result => {
            console.log(result)
        })
})
router.post('/sign_up', function(req, res, next) {
    var user = {
        username : req.body.username,
        password: req.body.password,
        email: req.body.email
    };
    api.save(user)
        .then(result => {
            console.log(result)            
        })
})
router.get('/user_list', function(req, res, next) {
    //返回全部用戶
    api.find({})
        .then(result => {
            console.log(result)            
        })
    //返回只包含一個鍵值name、age的全部記錄
    api.find({},{name:1, age:1, _id:0})
        .then(result => {
            console.log(result)            
        })
    //返回全部age大於18的數據
    api.find({"age":{"$gt":18}})
        .then(result => {
            console.log(result)            
        })
    //返回20條數據
    api.find({},null,{limit:20})
        .then(result => {
            console.log(result)            
        })
    //查詢全部數據,並按照age降序順序返回數據
    api.find({},null,{sort:{age:-1}}) //1是升序,-1是降序
        .then(result => {
            console.log(result)            
        })
})

項目Github地址: https://github.com/hzzly/expr...
若是對你有幫助,歡迎star

文章來源hzzly博客技術分享

相關文章
相關標籤/搜索