Node.js Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

问题出现在请求拦截解析token的时候

如果出现两次给前端相应,就会报这个错误
请检查 app.all 与app.use是否同时调用

// 引入 express 框架
const express = require('express')
// 引入jsonwebtoken  token工具
const jwt = require("jsonwebtoken");
// 登录路由
var Login = require('./pages/login/login')
// 博客路由
var Blog = require('./pages/blog/blog')
// 实例化 对象
const app = express()
// 端口3000
const port = 3000
// 路由 拦截
app.all('*', function(req, res, next) {
    // 设置跨域
    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Headers', 'Content-type');
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS,PATCH");
    // res.header('Access-Control-Max-Age',1728000);//预请求缓存20天
    let { url = '' } = req
    // 不是登录页面 与 注册页面 就校验token
    if(url.indexOf("/login") == -1 && url.indexOf("/register") == -1) {
        if (!req.headers.authorization) {
            return res.send ({
                err: '无效token'
            })
        }else {
            let token = req.headers.authorization; // 从Authorization中获取token
            let secretOrPrivateKey="wobuzhidao"; // 这是加密的key(密钥)
            jwt.verify(token, secretOrPrivateKey, (err, decode)=> {
                if (err) {  //  时间失效的时候 || 伪造的token
                    return res.send({status: -1})
                } else {
                    next()
                }
            })
        }
    }else {
    	// 这里没有else 就会报错了
        next();  
    }
});
app.use("/",Login)
app.use("/blog",Blog)
// Login(app);
// 监听端口
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值