auth中间件执行后,路由处理函数无法运行的问题求助
问题解决方法
你的auth中间件犯了一个核心错误:验证通过后不应该自行返回响应,而是要调用next()函数传递请求到后续的路由处理逻辑。
当你在中间件里执行return res.status(200).json(...)时,已经向客户端发送了响应,整个HTTP请求的响应周期就此结束,后面的router.get回调自然不会被执行。
修改后的auth中间件代码如下:
function auth(req, res, next) { const token = req.cookies.token; if (!token) { return res.status(401).json({message: "No token"}); } jwt.verify(token, process.env.SECRET_TOKEN, (err, decoded) => { if (err) { return res.status(401).json({message: "Invalid token"}); } req.user = decoded; // 调用next()让请求继续流向后面的路由处理函数 next(); }); }
另外补充一个细节:你的路由回调里用了req.params.user,但当前路由是/,没有定义URL参数user,这里会拿到undefined。如果用户信息是从token解码得到的,应该改用req.user来获取,比如:
router.get('/', auth, function(req, res){ // 根据你的token payload结构,使用对应的字段,比如req.user.id或req.user.username funcs.getBalance(req.user.id, function(err, result){ if (err) { console.log(err); res.status(500).json({error: err.message}); } else { res.status(200).json(result[0]); } }) });
内容的提问来源于stack exchange,提问作者Valtteri K.A.P
相关产品推荐
相关产品推荐

