Express.js中无法获取请求对象的自定义头部问题
问题原因
你代码里的核心问题是搞混了响应头和请求头:
/路由中res.header("auth-token","tokenstring")是给服务器返回的响应设置头,浏览器访问/时会收到这个头,但不会自动把它加到后续请求里。/getheader路由里req.headers['auth-token']是读取客户端发起请求时携带的头,因为你没在请求里带这个头,所以读取结果是undefined。
两个请求是完全独立的HTTP请求,不存在自动传递响应头到下一个请求的逻辑。
解决方案
根据你的使用场景选对应的方法:
场景1:前端调用接口时主动带请求头
如果是前端页面请求/getheader,需要手动在请求里添加头,比如用fetch的示例:
// 前端代码 fetch('/getheader', { method: 'GET', headers: { 'auth-token': 'tokenstring' } })
场景2:服务端内部调用时携带头
如果是服务端自己发起对/getheader的请求,用axios这类工具手动传递头:
const axios = require('axios'); app.get("/", async (req, res) => { // 内部调用/getheader并携带指定头 await axios.get('http://localhost:3000/getheader', { headers: { 'auth-token': 'tokenstring' } }); res.send("home"); })
场景3:浏览器请求间自动传递标识(用Cookie)
如果要在浏览器的多个请求间自动传递这个token,改用Cookie更合适,浏览器会自动在请求里携带Cookie:
// 先安装依赖:npm install cookie-parser const cookieParser = require('cookie-parser'); app.use(cookieParser()); // 设置Cookie app.get("/", (req, res) => { res.cookie("auth-token", "tokenstring").send("home") }) // 读取Cookie app.get("/getheader",(req,res)=>{ let token = req.cookies['auth-token'] console.log(token) // 此时能正确拿到token值 res.send("whatever") })
内容的提问来源于stack exchange,提问作者UMAIR ZAHID
相关产品推荐
相关产品推荐

