前言什么是Express?Express是一个基于Node.js平台的极简灵活的Web应用程序开发框架,它提供了一系列强大的功能来帮助您创建各种Web和移动设备应用程序。全局安装express脚手架$npminstallexpress-generator-gcreateexpressproject$expressmyapp$cdmyapp$npminstall$DEBUG=myappnpmstartMongoDBwithMongoose?MongoDB是一个用于存储数据的对象数据库;存储的数据格式为JSON。Mongoose是一个对象模型库,封装了MongoDB的操作(增、删、改等),用来操作这些数据。安装MongoDB:https://www.mongodb.com/download-center?jmp=nav安装Mongoose:$npminstallmongoose--save1.连接MongoDB在项目根目录var下新建/lib/mongo.jsmongoose=require("mongoose");vardb=mongoose.connect('mongodb://localhost:27017/myblog');module.exports=db要连接的数据库是myblog2.schema是存储的数据库模型骨架以文件的形式。不能直接连接数据库端,不具备操作数据库的能力。它只是数据库模型在程序片段中的一种体现,可以说是一个数据属性模型(传统意义上的表结构),或者说是一个“集合”模型骨架新建用户Schema新建/models/users.js项目根目录下varmongoose=require("mongoose");vardb=require('../lib/mongo');//一个用户模型varUserSchema=newmongoose.Schema({username:{type:String},密码:{type:String},头像:{type:String},年龄:{type:Number,default:0},描述:{type:String},电子邮件:{type:String},github:{type:String},time:{type:Date,default:Date.now}});//创建模型varUserModel=db.model("user",UserSchema);module.exports=UserModeluser:的名称数据库中的集合。当我们向其中添加数据时,如果用户已经存在,则会将其保存到其目录中。如果不存在,则创建用户集合,然后我们有了保存数据后的Model,我们也有了操作数据库的金钥匙,我们可以使用Model来进行具体的增删改查等操作。Entity是Model创建的实体,使用save方法保存数据。Model和Entity都可以影响数据库的运行,但Model比Entity更具可操作性。varUserEntity=newUserModel({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文件下创建使用Promise创建api.js封装了对数据库的操作,避免了回调地狱,让代码更容易理解和维护。varUserModel=require('../models/users');module.exports={/***Adddata*@param{[type]}data要保存的数据对象*/save(data){returnnewPromise((resolve,reject)=>{//model.create(savedobject,callback)UserModel.create(data,(error,doc)=>{if(error){reject(error)}else{resolve(doc)}})})},find(data={},fields=null,options={}){returnnewPromise((resolve,reject)=>{//model.find(要查找的对象(如果如果为空,则查找所有数据),attributefilterobject[可选参数],options[可选参数],callback)UserModel.find(data,fields,options,(error,doc)=>{if(error){reject(error)}else{resolve(doc)}})})},findOne(data){returnnewPromise((resolve,reject)=>{//model.findOne(要找到的对象,回调)UserModel.findOne(data,(error,doc)=>{if(error){reject(error)}else{resolve(doc)}})})},findById(data){returnnewPromise((resolve,reject)=>{//model.findById(idobjecttobefound,callback)UserModel.findById(data,(error,doc)=>{if(error){reject(error)}else{resolve(doc)}})})},update(conditions,update){returnnewPromise((resolve,reject)=>{//model.update(querycondition,updateobject,callback)UserModel.update(条件,更新,(error,doc)=>{if(error){reject(error)}else{resolve(doc)}})})},remove(conditions){returnnewPromise((resolve,reject)=>{//model.update(查询条件,callback)UserModel.remove(conditions,(error,doc)=>{if(error){reject(error)}else{resolve(doc)}})})}}四、使用在/routers/index.js中使用varapi=require('../lib/api');router.post('/login',function(req,res,next){varuser={username:req.body.username,password:req.body.password};api.findOne(user).then(result=>{console.log(result)})})router.post('/sign_up',function(req,res,next){varuser={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)})//返回所有只包含一个key值name,age的记录api.find({},{name:1,age:1,_id:0}).then(result=>{console.log(result)})//返回年龄大于18的所有数据api.find({"age":{"$gt":18}}).then(result=>{console.log(result)})//返回20条数据api.find({},null,{limit:20}).then(result=>{console.log(result)})//查询所有数据,并按年龄降序返回数据api.find({},null,{sort:{age:-1}})//1为升序,-1为降序.then(result=>{console.log(result)})})项目Github地址:https://github.com/hzzly/expr...如果对你有帮助,欢迎star文章来源hzzly博客技术分享
