前端逐渐趋向后端化、工程化、自动化开发。掌握一门后端语言已经成为我们不可或缺的阶段。Node的出现,让我们可以搭建简单计算的后台,实现全栈开发。现在经过几个阶段,开发了一套基于VUE开发的Node后台系统,一些干货分块记录。基于Node接口构建-登录注册实现1.express服务器安装的效果:npminstallexpress参考:constexpress=require("express");设置端口号constapp=express();constport=process.env.PORT||5000;app.listen(port,()=>{console.log(`Serverrunningonport${port}`);})在控制台运行nodeserver.js,可以打开http://localhost:5000请求连接,那么我们可以写第一个请求接口app.get("/",(req,res)=>{res.send("HellowWorld!")})因为每个命令都要重新执行一次保存,这样我们就可以安装npminstallnodemon-g来避免每次初始执行2.连接到MongoDB数据库。有了第一步,我们已经成功接入了一个自定义接口数据,那么现在我们需要根据数据库中的数据来执行我们的接口,使用Node中封装的MongoDB来操作(这里不明白的可以可以看之前总结的推文)安装:npminstallmongoose引用:constMongoClient=require("mongodb").MongoClient;创建一个文件keys.js,我们将所有的数据库连接写入其中,这样我们就可以直接调用module.exports={url:'mongodb://localhost:27017',dbName:'restful-api-prod',secretOrkey:'secret'//tokencall}在server.js页面引入连接mongodbclassMongodb{constructor(conf){//类原型下的构造函数//保存conf到构造好的集合中this.conf=conf//成员变量//连接this.client=newMongoClient(conf.url,{useNewUrlParser:true})//创建客户端this.client.connect(err=>{//有自动重连机制if(err){throwerr}console.log('连接数据库成功');});}}module.exports=newMongodb(conf);3、搭建路由和数据模型创建users.js,这里的页面编写会涉及登录、注册、设置Token、密码加密、用户、邮箱的存在性判断、Token识别获取信息等。引入router写接口路由constexpress=require("express");constrouter=express.Router();//接口请求//api/users/testrouter.get("/test",(req,res)=>{res.json({msg:"loginworks"})})module.exports=router;创建的文件需要在server.js中被引用constusers=require("./routes/api/users");app.use("/api/users",users);模式数据模型创建constmongoose=require('mongoose');constSchema=mongoose.Schema;//创建SchemaconstUserSchema=newSchema({name:{type:String,required:true},email:{type:String,required:true},password:{type:String,required:true},avatar:{//Avatartype:String},identity:{type:String,required:true},date:{type:Date,default:Date.now}});module.exports=User=mongoose.model('用户',UserSchema);4.搭建注册界面,存储数据,方便后期界面调试需要安装Postman。接下来的请求是POST请求,比get请求麻烦。POST请求需要安装第三方模块npmibody-parser,在server.js中引用constbodyParser=require("body-parser");//使用body-parser中间件app.use(bodyParser.urlencoded({extended:false}));//启用数据传输到postapp.use(bodyParser.json());//让数据JSON化,引入到Schema创建的数据模型中。如果引用了,那么我们就可以使用model直接User.findOne可以在数据库中查询到,但是不知道什么原因,执行的时候没有进入,然后使用封装的Promise请求进行操作注册router.post("/register",async(req,res)=>{})判断注册邮箱是否存在varuserFind=mongoHelper.findOne("test",{email:req.body.email});列出填写的数据constnewUser=newUser({name:req.body.name,email:req.body.email,avatar,password:req.body.password,identity:req.body.identity})密码处理密码加密运行安装(使用参考npm)npminstallbcrypt-SdatastorageawaitmongoHelper.insertOne("test",newUser);返回res.status(200).json(newUser);//打印控制台头像链接获取全国通用头像的数据安装:npmigravatarconstavatar=gravatar.url(req.body.email,{s:'200',r:'pg',d:'mm'});login(gettoken)router.post("/login",async(req,res)=>{})查询数据库判断用户是否存在mongoHelper.findOne("test",{email}).then(user=>{})密码是否匹配(bcrypt.compare)Token设置和安装npminstalljsonwebtoken判断匹配密码成功后进行操作,这里需要注意的是token:"bearer"+tokenjwt.sign("rule","加密名称","过期时间","箭头函数")construle={id:user.id,name:user.name,avatar:user.avatar,identity:user.identity,};jwt.sign(rule,keys.secretOrkey,{expiresIn:3600},(err,token)=>{if(err)throwerr;res.json({success:true,token:"bearer"+token})})使用passport-jwt验证token(用在需要请求用户信息的接口)安装npmipassport-jwtpassportreferenceconstpassport=require("passport");//AuthenticaterequestInitializeapp.use(passport.initialize());代码提取方式require("./config/passport")(passport);//传递过去的对象router.get("/current","verificationtoken",(req,res)=>{res.json(req.user);})这个页面直接创建passport文件然后扔出去,引用passport-jwt官网constJwtStrategy中需要的数据=require('passport-jwt').Strategy,ExtractJwt=require('passport-jwt').ExtractJwt;constmongoose=require("mongoose");//constUser=mongoose.model("users");constkeys=require("../config/keys");constmongoHelper=require('../models/mongoHelper')constopts={}opts.jwtFromRequest=ExtractJwt.fromAuthHeaderAsBearerToken();opts.secretOrKey=keys.secretOrkey;//serverrouter.get("/current",passport.authenticate("jwt",{session:false}),(req,res)=>{res.json(req.user);})//passport.authenticate验证token权限管理(身份)注册登录根据请求头中token的数据,更新了用户的信息。下篇实现全栈收银系统(Node+Vue)(下)代码已上传到github,请给个star,后续更新,谢谢支持
