node 做登入拦截始终报错...
发布于 2 个月前 作者 yangzaiwangzi 838 次浏览 来自 问答

QQ截图20170908104853.png 做个人中心是否登入的路由拦截判断,如上… 想把所有路由含有 ‘ memberindex ’ 的页面全部拦截判断了… 结果当你没有登入时,确实会跳到登入页面,但是node会报 Error: Can’t set headers after they are sent. 请问大家,这是咋回事??如何解决??谢谢!!!

8 回复

报这个错肯定是你在执行了redirect之后,后面的代码里又对res进行了操作。虽然看不出来问题在哪,但是肯定是这样的。

@Treagzhao 我网上搜索,结果看来,好像有这种可能,怎么解决呢???

路由执行了两次,你不能这样写

为什么是截图,没有代码不好改

@htoooth

module.exports = function (app) { // 路由拦截–判断个人中心中所有页面是否登陆 app.use(’/memberindex’,function (req, res, next) { if (!req.session.user) { return res.redirect(config.nginx+"/login"); }else{ next(); }; }); // 注册 app.use(’/memberindex/aa’, require(’./member/aa’)); app.use(’/memberindex/bb’, require(’./member/bb’)); app.use(’/memberindex/cc’, require(’./member/cc’)); //… //… //… //… //… //… // error page app.use(function (err, req, res, next) { console.log(err); res.render(‘error’, { title: “error”, error: err }); }); // 404 page app.use(function (req, res) { console.log(res.headersSent); if (!res.headersSent) { res.status(404).render(‘404’, { title: “xxx”, page: “index” }); } }); };

重复调用 res.end 造成的

你可以用 app.use(function loginCheck(req,res,next){ //判断路由 //判断是否登录 //后续逻辑 }) 替换对应的 /memberindex 路由处理

或者删除 /memberindex 的处理 修改如下 function loginCheck(req,res,next){ //判断路由 //判断是否登录 //后续逻辑 } app.use(’/memberindex/aa’, loginCheck,require(’./member/aa’));

@zhhb 现在做的就是这个样子,谢谢啦

回到顶部