安装express-jwt

npm i express-jwt

1.0 创建express服务器并开启监听

const express = require("express")
const server = express()

2.0 开启cors跨域

const cors = require('cors')
server.use(cors())

3.0 设置uploads为静态资源目录

server.use('/uploads',express.static('uploads'))

4.0 设置jwt

const { expressjwt:jwt } = require("express-jwt")
console.log(jwt);
// app.use(jwt().unless());
// jwt() 用于解析token,并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
  secret: 'czh', // 生成token时的 钥匙,必须统一
  expiresIn: '365d', // token的有效期
  algorithms: ['HS256'] // 必填,加密算法,无需了解
}).unless({
  path: ['/api/login','/api/reguser', /^\/uploads\/.*/] // 除了这两个接口,其他都需要认证
}));

5.0 通过路由中间件来 加载不同的路由

const userRouter = require('./router/users_ruoter')
const cateRouter = require('./router/cate_router')
const accountRouter = require('./router/account_router')
const finishProductRouter = require('./router/finish_product')
const semiManufacturesRouter = require('./router/semi_manufactures')
server.use('/api',accountRouter);
server.use('/my',userRouter);
server.use('/my/article',cateRouter);
server.use('/api',finishProductRouter);
server.use('/api',semiManufacturesRouter);

6.0 错误处理中间件用来检查token合法性

server.use((err, req, res, next) => {
  console.log('有错误', err)
  if (err.name === 'UnauthorizedError') {
    // res.status(401).send('invalid token...');
    res.status(401).send({ code: 1, message: '身份认证失败!' });
  }
});

完整代码:

// 1.0 创建express服务器并开启监听
const express = require("express")
const server = express()
// 2.0 开启cors跨域
const cors = require('cors')
server.use(cors())
// 3.0 设置uploads为静态资源目录
server.use('/uploads', express.static('uploads'))


// 4.0 设置jwt
const { expressjwt: jwt } = require("express-jwt")
console.log(jwt);
// app.use(jwt().unless());
// jwt() 用于解析token,并将 token 中保存的数据 赋值给 req.user
// unless() 约定某个接口不需要身份认证
server.use(jwt({
  secret: 'czh', // 生成token时的 钥匙,必须统一
  expiresIn: '365d', // token的有效期
  algorithms: ['HS256'] // 必填,加密算法,无需了解
}).unless({
  path: ['/api/login', '/api/reguser', /^\/uploads\/.*/] // 除了这两个接口,其他都需要认证
}));


// 5.0 通过路由中间件来 加载不同的路由
const userRouter = require('./router/users_ruoter')
const cateRouter = require('./router/cate_router')
const accountRouter = require('./router/account_router')
const finishProductRouter = require('./router/finish_product')
const semiManufacturesRouter = require('./router/semi_manufactures')
server.use('/api', accountRouter);
server.use('/my', userRouter);
server.use('/my/article', cateRouter);
server.use('/api', finishProductRouter);
server.use('/api', semiManufacturesRouter);
// 6.0 错误处理中间件用来检查token合法性
server.use((err, req, res, next) => {
  console.log('有错误', err)
  if (err.name === 'UnauthorizedError') {
    // res.status(401).send('invalid token...');
    res.status(401).send({ code: 1, message: '身份认证失败!' });
  }
});


// 1.0.1 开启监听
server.listen(8080, () => {
  console.log("您的服务器已经在8080端口就绪了");
})