实现全栈收银系统(Node+Vue)(一)

前端渐渐趋向后端化,工程化,自动化开发,掌握一门后端语言成了咱们必备的不可少阶段,Node的出现让咱们可以搭建了简单运算的后台,实现全栈的开发,如今经过几个阶段来开发一套基于VUE开发的Node后台系统,区块式的记录一些干货。javascript

基于Node接口搭建-登陆注册

1. express搭建服务器

安装: npm install express
引用: const express = require("express");
复制代码

设置端口号前端

const app = express(); 
const port = process.env.PORT || 5000;
app.listen(port,()=>{
    console.log(`Server running on port ${port}`);
})
复制代码

在控制台中运行node server.js,便可以开出http://localhost:5000的请求链接,那么咱们能够根据请求链接编写出第一个请求接口java

app.get("/",(req,res) => {
    res.send("Hellow World!")
})
复制代码

因为每次保存都要从新执行命令,故咱们能够安装npm install nodemon -g避免每次初始执行node

2. 链接MongoDB数据库

有了第一步的操做咱们已经可以成功访问到了一个自定义接口数据了,那么如今咱们须要根据数据库的数据执行咱们的接口,在Node中运用封装好的MongoDB进行操做(此处若有不明白能够看下以前总结的推文)git

安装:npm install mongoose
引用: const MongoClient = require("mongodb").MongoClient;
复制代码

建立一个文件keys.js咱们将数据库链接所有编写进去,方便后期直接调用github

module.exports = {
    url: 'mongodb://localhost:27017',
    dbName: 'restful-api-prod',
    secretOrkey: 'secret' //token 调用
}
复制代码

server.js页面中进行引入进行链接mongodbweb

class Mongodb{
    constructor(conf) { //class原型下的构造函数
        //保存conf到构造的集合中
        this.conf=conf //成员变量
        //链接
        this.client = new MongoClient(conf.url,{useNewUrlParser:  true}) //建立客户端
        this.client.connect( err => { //有自动重连的机制
            if(err) {
                throw err
            }
            console.log('链接数据库成功');
        });
    }
}
module.exports = new Mongodb(conf);
复制代码

3. 搭建路由和数据模型

建立users.js,此处页面编写将会涉及到 登陆注册设置Token密码加密用户,邮箱是否存在判断Token识别获取信息等。mongodb

引入router进行接口路由编写数据库

const express = require("express");
const router = express.Router(); //接口请求
// api/users/test
router.get("/test",(req,res) => {
    res.json({msg:"login works"})
})
module.exports = router;
复制代码

建立的文件须要到server.js中引用express

const users = require("./routes/api/users");
app.use("/api/users",users);
复制代码

Schema的数据模型建立

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// Create Schema
const UserSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  avatar: { //头像
    type: String
  },
  identity: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now
  }
});

module.exports = User = mongoose.model('users', UserSchema);

复制代码

4. 搭建注册接口并存储数据

方便后期接口调试的须要安装下postman,接下来的请求是POST请求,也是相对get请求比较麻烦的一点,POST的请求须要安装第三方的模块

npm i body-parser
复制代码

在 server.js 中引用

const bodyParser = require("body-parser");
 //使用body-parser中间件
 app.use(bodyParser.urlencoded({extended:false})); //开启往post传送数据
 app.use(bodyParser.json()); //让数据json化
复制代码

引入Schema建立的数据模型 若是引用了那么咱们能够根据模型直接 User.findOne 就能在数据库中查询,可是未知缘由,在执行时一直没进去,便接下来都使用了封装的Promise请求进行操做

注册

router.post("/register",async(req,res) => {})

  1. 判断注册邮箱是否存在
var userFind = mongoHelper.findOne("test",{email: req.body.email});
复制代码
  1. 罗列填写的数据
const newUser = new User({
       name: req.body.name,
       email: req.body.email,
       avatar,
       password:req.body.password,
       identity:req.body.identity
   })
复制代码
  1. 密码处理

密码加密操做安装(使用参考npm) npm install bcrypt -S

  1. 数据储存
await mongoHelper.insertOne("test",newUser);
return res.status(200).json(newUser); //打印在控制台的数据
复制代码
  1. avatar的获取全国通用头像的连接
安装:npm i gravatar
const avatar = gravatar.url(req.body.email, {s: '200', r: 'pg', d: 'mm'});
复制代码

登陆(获取token)

router.post("/login",async(req,res) => {})

  1. 查询数据库,判断用户是否存在
mongoHelper.findOne("test",{email}).then(user => {})
复制代码
  1. 密码是否匹配(bcrypt.compare)
  2. Token 设置
安装 npm install jsonwebtoken
复制代码

在判断匹配密码成功后进行操做,此处须要注意到的是 token: "Bearer "+token

jwt.sign("规则","加密名字","过时时间","箭头函数")

const rule = {
        id:user.id,
        name:user.name,
        avatar:user.avatar,
        identity: user.identity,
 };
 jwt.sign(rule,keys.secretOrkey,{expiresIn: 3600},(err,token) => {
    if(err) throw err;
    res.json({
        success: true,
        token: "Bearer "+token
    })
})
复制代码

使用passport-jwt验证token(运用在须要请求用户信息的接口)

安装 npm i passport-jwt passport

引用 const passport = require("passport"); //对请求进行身份验证

初始化 app.use(passport.initialize());

代码抽离模式 require("./config/passport")(passport); //传对象过去

router.get("/current","验证token",(req,res) => {
    res.json(req.user);
})
复制代码

建立passport文件直接在这个页面操做再抛出,在passport-jwt官网中引用须要的数据

const JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
const mongoose = require("mongoose");
// const User = mongoose.model("users");
const keys =require("../config/keys");
const mongoHelper = require('../models/mongoHelper')
const opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = keys.secretOrkey;

复制代码
//server
router.get("/current",passport.authenticate("jwt",{session:false}),(req,res) => {
    res.json(req.user);
})
//passport.authenticate 验证token
复制代码

权限管理(identity)

注册

注册
登陆
登陆
根据token在请求头的数据请求到用户的信息

代码已上传github,请给star,后续继续更新,多谢支持

相关文章
相关标签/搜索