express 出现 Can‘t set headers after they are sent.

浏览器请求一次之后,服务器却返回两次及两次以上的响应。我出现这个的原因是因为app.use里面 next()调用了两次。

var path = require('path');
module.exports = ['/user', function(req, res, next) {
    // console.log(123);
    res.sendFile(path.join(__dirname, '../../user/index.html'));
    next()
}];

 入口文件

const express = require('express')
const app = express()
const jwt = require('jsonwebtoken')
// 用于获取post请求参数
var bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({
    extended: false
}))
/** 1、访问静态资源需要完整路径,2、访问资源需要省略static
 * 1、app.use('/static', express.static('static'));
 * 2、app.use(express.static('static'));
 */
app.use('/static', express.static('static'));
/**
 * 前端 打包后的文件资源
 */
app.use(express.static('user'));
app.use(express.static('frontEnd'));
app.use(express.static('backstage'));

app.use(...require('../build/userPage'));
// app.use(express.static('backstage'));
// app.use(express.static('backstage'));

const cros = require('cors')
app.use(cros())
app.use(bodyParser.json())
//设置跨域访问
// app.all('*', function(req, res, next) {
//     res.header("Access-Control-Allow-Origin", "*");
//     res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
//     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,token, Authorization");
//     next();
// });
// 路由拦截
app.use(function (req, res, next) {
    // console.log(req.originalUrl);
    // 不需要携带token的路由
    let whiteList = ['/admin/login', '/idx', '/user', '/front']
    if (whiteList.includes(req.originalUrl)) {
        next()
    } else {
        if (req.headers.hasOwnProperty('token')) {
            jwt.verify(req.headers.token, 'lfgg_yyds', function (err, decoded) {
                // 令牌验证出现异常 则返回异常类型
                if (err) {
                    if (err.name === 'TokenExpiredError') {
                        res.json({
                            code: 50011,
                            message: 'token过期'
                        });
                    } else {
                        res.json({
                            code: 50012,
                            message: '无效token'
                        });
                    }
                } else {
                    // 通过令牌 解析令牌信息获取用户信息
                    req.userInfo = decoded
                    next();
                }
            });
        }
    }

});
module.exports = app

出错原因

 

 

 解决办法,删除‘/user’路由下的next()

var path = require('path');

module.exports = ['/user', function(req, res, next) {

    res.sendFile(path.join(__dirname, '../../user/index.html'));

}];

保存就可以啦

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值