Express MongoDB步步為’贏’

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

前奏

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 }
});
//建立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: "[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)            
})
})

專案Github地址: https://github.com/hzzly/expr…
如果對你有幫助,歡迎star

文章來源hzzly部落格技術分享

相關文章

伺服器 最新文章