node测试接口(登录+mock)01

目录

 router

 app.js

package.json


  •  router

    • index
    const router = require('express').Router()
    // 对称加密(aes 加密和解密只有一个钥匙)和非对称加密(rsa 加密和解密是两把钥匙[公钥和私钥])
    // 加密 sign
    // 解密 verify
    const jwt = require('jsonwebtoken')
    const mockjs = require('mockjs')
    
    // 加密密钥
    const secret = 'afewlkfjewkfjewlfjewi;fjewl;jfwi;fjowjwo;igejgejwlk;flfewjflewjl'
    
    // 登录
    router.post('/login', (req, res) => {
      let {username, password} = req.body
      if (['admin', 'lisi'].includes(username) && password == 'admin') {
        // 生成token
        let token = jwt.sign({
          uid: 1000,
          username,
          time: Date.now()
        }, secret)
    
        let menu = []
        if (username === 'admin') {
          menu = [
            {name: '欢迎页', path: '/admin/index'},
            {name: '用户管理', path: '/admin/users'},
            {name: '文章管理', path: '/admin/article'},
          ]
        } else {
          menu = [
            {name: '欢迎页', path: '/admin/index'},
            // {name: '用户管理', path: '/admin/users'},
            // {name: '文章管理', path: '/admin/article'},
          ]
        }
    
        // 登录成功
        res.send({
          code: 0,
          msg: 'ok',
          data: {
            uid: 1000,
            username,
            // 用户的状态  加密算出来的
            token,
            // 用户角色
            role: username,
            menu
          }
        })
      } else {
        res.send({
          code: 1001,
          msg: '账号或密码不正确',
          data: null
        })
      }
    })
    
    // 得到在请求头中的token 中间件处理
    router.use((req, res, next) => {
    
      // 在请求头中得到token字符串
      let token = req.headers.token
      if (!token) {
        return res.send({
          code: 2000,
          msg: 'token不合法',
          data: ''
        })
      }
      // token解密
      let userinfo = jwt.verify(token, secret)
      // 拿解密后的信息,进行有效性验证,验证如果不通过则返回不合法json
      // 合法,则需要重新生成一个新的token -- 无感token换取
      userinfo = {
        ...userinfo,
        time: Date.now()
      }
      // 新的token
      token = jwt.sign(userinfo, secret)
      res.setHeader('token', token)
      next()
    });
    
    // 添加用户
    router.post('/users', (req, res) => {
      let body = req.body;
      body = {id: Date.now(), ...body}
      res.send({
        code: 0,
        msg: 'ok',
        data: body
      })
    })
    
    // 文件上传
    router.post('/upfile', (req, res) => {
      res.send({
        code: 0,
        msg: 'ok',
        data: {
          url: 'http://localhost:3000/uploads/1.jpg'
        }
      })
    })
    
    // 用户列表
    router.get('/users', (req, res) => {
      let user = mockjs.mock({
        // 生成10条记录
        'userData|10': [
          {
            // id下标,初始值为1,每次累加
            "id|+1": 1,
            "name": "@cname",
            "sex|1": ['先生', '女士'],
            "age|1-150": 10,
            "avatar": "@image('200x200','#4A7BF7', '#FFF', 'Mock')",
            "introduce": "@cparagraph(20)"
          }
        ]
      })
    
      res.send({
        code: 0,
        msg: 'ok',
        data: user
      })
    })
    
    // 删除用户
    router.delete('/users/:id', (req, res) => {
      res.send({
        code: 0,
        msg: 'ok',
        data: null
      })
    })
    
    router.get('/users/:id', (req, res) => {
      res.send({
        code: 0,
        msg: 'ok',
        data: mockjs.mock({
          "id": req.params.id,
          "username": "@cname",
          "password": /[a-z][A-Z][0-9][a-z][A-Z][0-9]/,
          "sex|1": ['先生', '女士'],
          "age|1-150": 10,
          "avatar": "@image('200x200','#4A7BF7', '#FFF', 'Mock')",
          "introduce": "@cparagraph(20)"
        })
      })
    })
    
    router.put('/users/:id', (req, res) => {
      res.send({
        code: 0,
        msg: 'ok',
        data: mockjs.mock({
          "id": req.params.id,
          "username": "@cname",
          "password": /[a-z][A-Z][0-9][a-z][A-Z][0-9]/,
          "sex|1": ['先生', '女士'],
          "age|1-150": 10,
          "avatar": "@image('200x200','#4A7BF7', '#FFF', 'Mock')",
          "introduce": "@cparagraph(20)"
        })
      })
    })
    
    
    router.post('/users', (req, res) => {
      res.send(req.body)
      // console.log(req.body)
      // res.send('111')
    })
    
    
    module.exports = router
    


  •  app.js

const express = require('express')
const cors = require('cors')
const {createProxyMiddleware: proxy} = require('http-proxy-middleware')
const app = express()
app.listen(8080)
app.use(express.static('www'))

// 解决跨域
app.use(cors())

// post
app.use(express.urlencoded({extended: false}))
app.use(express.json())

// 代理
// app.use('/apollo', proxy({
//   target: 'https://i.maoyan.com',
//   changeOrigin: true,
// }))

app.use('/api', require('./router'))


  • package.json

{
  "name": "api",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "nodemon app.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "http-proxy-middleware": "^2.0.1",
    "jsonwebtoken": "^8.5.1",
    "mockjs": "^1.1.0",
    "multer": "^1.4.3"
  }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值