Node.js与React跨实例部署后登录出现req.get参数缺失错误
问题排查:Node.js身份验证中间件报错
TypeError: name argument is required to req.get 报错信息
TypeError: name argument is required to req.get at IncomingMessage.header (/home/tech/Desktop/REST/node_modules/express/lib/request.js:67:11) at module.exports (/home/tech/Desktop/REST/middleware/is-auth.js:5:28
相关代码
身份验证中间件
//extract token from frontend/client module.exports = (req, res, next) => { const authHeader = req.get(''); if (!authHeader) { const error = new Error('Not Authenticated'); error.statusCode = 401; throw error; } const token = authHeader.split(' ')[1]; let decodedToken; try { decodedToken = jwt.verify(token, 'secret'); //secret is used to validate token } catch (err) { err.statusCode = 500; throw err; } }
前端请求代码
//pass token to the server fetch('http://localhost:8080/feed/posts?page=' + page, { headers: { Authorization: 'Bearer ' + this.props.token } })
问题原因与修复方案
- 错误原因:
req.get('')未传入请求头字段名,Express的req.get()方法必须指定要获取的请求头名称,否则会触发该TypeError。前端是通过Authorization头传递token的,中间件却没有指定这个字段。 - 修复步骤:
- 将
req.get('')修改为req.get('Authorization'),匹配前端传递的请求头。 - 补充调用
next(),否则请求会挂起无法进入后续路由处理。 - 可选:将解码后的token信息挂载到
req对象,方便后续业务逻辑使用。
- 将
修改后的中间件代码:
//extract token from frontend/client module.exports = (req, res, next) => { const authHeader = req.get('Authorization'); if (!authHeader) { const error = new Error('Not Authenticated'); error.statusCode = 401; throw error; } const token = authHeader.split(' ')[1]; let decodedToken; try { decodedToken = jwt.verify(token, 'secret'); } catch (err) { err.statusCode = 500; throw err; } // 挂载解码后的用户信息到req,供后续路由使用 req.userId = decodedToken.userId; next(); }
内容的提问来源于stack exchange,提问作者Saliko
相关产品推荐
相关产品推荐

