继续引用express 的中间件最后的文件结果 修改client文件夹下js文件夹下index.js文件:
- index.js代码如下:
// 前端的代码, 发送一个请求
function myAjax0() {
const xhr = new XMLHttpRequest()
xhr.open('get', '/api/login/login?username=QF001&password=123456')
xhr.onload = function() {
const res = JSON.parse(xhr.responseText)
window.localStorage.setItem('token', res.token)
}
xhr.send()
}
myAjax0()
function myAjax2() {
const xhr = new XMLHttpRequest()
xhr.open('post', '/api/users/info')
xhr.onload = function() {
console.log(JSON.parse(xhr.responseText))
}
xhr.setRequestHeader('authorization', window.localStorage.getItem('token'))
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
xhr.send('id=20040216')
}
setTimeout(() => {
myAjax2()
}, 4000)
新建一个utils文件夹,在其下边新建一个token.js文件:
- token.js代码如下:
// 专门存储关于 token创建于解密的方法
const jwt = require('jsonwebtoken')
// 封装一个 关于 token 创建的方法
// exports.initToken = ((info, to, timer) => {
// return jwt.sign(info, to, timer)
// })
exports.initToken = (info, to, timer) => jwt.sign(info, to, {expiresIn: timer})
// 封装一个token解密的方法,因为他本身是 回调函数的解决方式,我们这里做一个改造,修改为promise的方式
exports.testToken = (token, to) => {
return new Promise((res, rej) => {
jwt.verify(token, to, (err, data) => {
if(err) {
res({
code: 0,
msg: err
})
return
}
res({
code: 1,
msg: data
})
})
})
}
新建一个conf文件夹,在其下边新建一个config.js文件
- config.js文件如下:
// 内部存储一些多次使用的字符串,比如token的令牌,还有一些正则(用户名,密码,id的校验)
exports.To = 'QF001'
修改router文件夹下的users.js文件:
- users.js文件代码如下:
// 导入第三方包
const express = require('express')
const { To } = require('../conf/config')
const { UsersInfo, UsersSetName } = require('../controller/users')
const { testToken } = require('../utils/token')
// 创建一个分表
const UsersRouter = express.Router()
// 验证是否有token
UsersRouter.use((req, res, next) => {
if(!req.headers.authorization) {
return next(4)
}
// 如果代码执行到这个位置,说明一定有token,此时去解析token
testToken(req.headers.authorization, To).then((res) => {
if(res.code === 1) {
return next()
} else {
return next(5)
}
})
})
// 挂载分表
UsersRouter.post('/info', UsersInfo)
UsersRouter.post('/setName', UsersSetName)
// 导出路由表
module.exports = UsersRouter
在router文件夹下新建一个login.js文件:
- login.js文件代码如下:
// 导入第三方包
const express = require('express')
const { To } = require('../conf/config')
const { initToken } = require('../utils/token')
// 创建一个分表
const LoginRouter = express.Router()
// 挂载分表
LoginRouter.get('/login', (req, res) => {
/**
* 此时是登录接口。应该是首先验证参数(去请求中阃件验证)
* 需要去数据库根据用户传递的信息找到对应的数据,返回给前端
* 并且生成一个token同时传递给前端
* */
// 通过接口传递过来的数据(暂时使用),生成一个token
const token = initToken(req.query, To, 3)
res.send({
code:1,
msg:'你看到我说明登陆成功',
token,
})
})
module.exports = LoginRouter
在router文件夹的index.js总表文件中引入login.js分表
- index.js文件代码如下:
// 导入第三方包
const express = require('express')
const CartRouter = require('./cart')
const GoodsRouter = require('./goods')
const LoginRouter = require('./login')
const UsersRouter = require('./users')
// 创建一个路由总表
const Router = express.Router()
// 添加分表
Router.use('/goods', GoodsRouter)
Router.use('/users', UsersRouter)
Router.use('/cart', CartRouter)
Router.use('/login', LoginRouter)
// 导出总表
module.exports = Router