You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:20:27