node express 如何让每个api都添加token验证
我用到的方法是自己手写的中间件,也可以使用express-jwt中间件进行验证
- 封装一个中间件然后暴露出去
const mysql = require('../table/user')
module.exports = ((req, res, next) => {
// 获取当前访问的api地址
const url = req.originalUrl
// 不需要进行验证的api
var urlArr = ['/api/Applets/login']
// 验证当前的api是否存在不需要验证的api的列表里面
var is_next = urlArr.find(item => item === url)
if (is_next) {
next()
return false
}
// 获取api传递过来的token
const token = req.headers.token || ''
// 获取api传递用户id
const uid = req.body.uid || ''
// 基本检测,token和id都不允许为空
switch(true) {
case token === '':
return res.status(401).json({
msg: 'wdnmd token 呢'
})
case uid === '':
return res.status(401).json({
msg: 'wdnmd id 呢'
})
default:
}
// 进行数据库检测
const sql = `SELECT * FROM users WHERE id = ${uid} AND token LIKE '${token}'`
mysql.query(sql, function (error, results, fields) {
if (results[0]) {
next()
} else {
return res.status(401).json({
msg: 'wdnmd先登录啊闸总'
})
}
})
})
- 定义并且使用中间件
var express = require('express');
var app = express.Router();
var Applets = require('./Applets/home.js');
var qiniu = require('./qiniu/qiniu.js');
var expressJWT = require('express-jwt');
const bodyParser=require("body-parser");
var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
// 全局验证
var detectToken = require('../Middleware/detectToken');
app.use(jsonParser);
app.use(urlencodedParser);
// 全局验证
app.use(detectToken);
//配置路由
app.use('/Applets', Applets);
app.use('/qiniu', qiniu);
module.exports = app;
- 当然,这个是全局的验证,如果是局部,针对单个api也可以这样子来使用
var express = require('express');
var router = express.Router();
const gethollowList = require('../../api/Applets/gethollowList')
var detectToken = require('../../Middleware/detectToken');
// 对单个api进行验证可以去掉中间件的验证api地址,保留基本验证和mysql验证就好了
router.post('/gethollowList',detectToken , function(req,res){
const data = req.body
gethollowList(data, res)
});
distribution()
module.exports = router;