Node Express中如何正确设置自定义header并在路由正常获取?
问题核心错误点拆解
1. 混淆了请求头和响应头的操作对象
res.set() 是用来设置服务端返回给客户端的响应头的方法,而你在路由中访问的 req.headers 是客户端发送到服务端的请求头集合,二者属于完全独立的对象,往响应头中添加的字段自然不会出现在请求头里。
如果你的需求是在中间件中给当前请求挂载自定义参数供后续路由使用,直接给 req 对象添加自定义属性即可,示例如下:
// 中间件挂载自定义参数 app.use((req, res, next) => { req.myCustomValue = 'some value'; next(); }) // 路由中直接读取 app.get('/abc', (req, res) => { console.log(req.myCustomValue); })
如果确实需要修改当前请求的请求头,直接操作 req.headers 对象即可:
app.use((req, res, next) => { req.headers['my-header'] = 'some value'; next(); })
2. 请求头读取规则错误
即使前面的逻辑修正后,你现有的读取代码也存在两处问题:
- 键名拼写错误:你设置的键是
My-header,读取时写的是My-headers,多了末尾的s - Express 会自动将所有请求头的键转为全小写,必须用全小写的键名才能读取到对应值,正确写法是
req.headers['my-header'],使用大写/驼峰格式的键名无法匹配到对应值。
3. 中间件注册顺序问题
如果修正上述问题后依然无法读取到值,需要检查中间件的注册位置:必须保证自定义 header 处理中间件的注册顺序在所有路由定义之前,如果中间件注册在路由之后,请求进入路由时还未经过中间件处理,自然无法读取到对应字段。
内容的提问来源于stack exchange,提问作者SPG
相关产品推荐
相关产品推荐

