目录
-
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"
}
}