为何Node.js中req.headers可用但req.getHeaders()报错?
请求头获取方法报错的原因解析
现象复现
能正常运行的代码:
const http = require('http'); http.createServer((req, res) => { res.write(JSON.stringify(req.headers)); // req.headers ✔️ res.end(); }).listen(3000);
无法运行的代码:
const http = require('http'); http.createServer((req, res) => { res.write(JSON.stringify(req.getHeaders())); // req.getHeaders() ❌ res.end(); }).listen(3000);
运行后报错:
$ node script.js <go to: http://localhost:3000/> [...] TypeError: req.getHeaders is not a function
但Node.js v18.x、v16.x文档的「message.headers」章节,有这样的示例代码:
console.log(request.getHeaders());
原因说明
核心问题是对象类型混淆:
- 服务器端的
req是IncomingMessage类的实例,代表客户端发来的请求,它仅通过headers属性暴露请求头,不存在getHeaders()方法。 - 文档里的
request.getHeaders(),这里的request指的是客户端发起请求时的ClientRequest对象(比如http.request()创建的对象),或是服务器端的ServerResponse对象(即代码里的res)——res.getHeaders()是用来查看当前要发送给客户端的响应头的方法。
总结:
- 服务器端读取请求头:用
req.headers - 服务器端查看待发送的响应头:用
res.getHeaders() - 客户端查看自己要发送的请求头:用
clientRequest.getHeaders()
内容的提问来源于stack exchange,提问作者Det
相关产品推荐
相关产品推荐

