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
在項目根目錄下新建/lib/mongo.jsbash
var mongoose = require("mongoose"); var db = mongoose.connect('mongodb://localhost:27017/myblog'); module.exports = db
要鏈接的數據庫爲myblog
一種以文件形式存儲的數據庫模型骨架,沒法直接通往數據庫端,不具有對數據庫的操做能力,僅僅只是數據庫模型在程序片斷中的一種表現,能夠說是數據屬性模型(傳統意義的表結構),又或着是「集合」的模型骨架
新建一個用戶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); } });
在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博客技術分享