Express+MongoDB步步為'贏'

來源:互聯網
上載者:User

標籤:維護   tps   model   data   create   div   pre   option   get   

1190000008830333

 

前奏

Express 是什嗎?

Express 是一個基於 Node.js 平台的極簡、靈活的 web 應用開發架構,它提供一系列強大的特性,協助你建立各種 Web 和行動裝置應用。

全域安裝express腳手架

$ npm install express-generator -g

建立express項目

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

MongoDB與Mongoose?

  • MongoDB是一個對象資料庫,是用來儲存資料的;儲存的資料格式為JSON。

  • Mongoose是封裝了MongoDB操作(增刪改查等)的一個物件模型庫,是用來操作這些資料的。

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

安裝Mongoose:

$ npm install mongoose --save
一、串連MongoDB

在項目根目錄下建立/lib/mongo.js

var mongoose = require("mongoose");var db = mongoose.connect(‘mongodb://localhost:27017/myblog‘);module.exports = db

要串連的資料庫為myblog

二、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 }});//建立Modelvar 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: "[email protected]",    github: ‘https://github.com/hzzly‘});UserEntity.save(function(error,doc){    if(error){        console.log("error :" + error);    }else{        console.log(doc);    }});
三、封裝資料庫的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)                }            })        })    }}
四、使用

在/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)                    })})

Express+MongoDB步步為'贏'

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.