Node.js使用http模块时报request.getHeader is not a function如何解决?
问题分析
你遇到的报错核心原因是API调用混淆:
- Node.js
http.createServer回调中的request是http.IncomingMessage类的实例,该实例本身没有getHeader()方法 getHeader()是响应对象response(http.ServerResponse类实例)、或是客户端发起请求时的http.ClientRequest类实例的方法,不适用于服务端接收的请求对象
修复方案
获取请求头直接访问request的headers属性即可,Node.js会自动把所有请求头的字段名转换为小写,所以取值时要用小写的字段名:
把你代码里的对应行:
var header = request.getHeader('Content-Type');
替换为:
var header = request.headers['content-type'];
额外说明
GET请求通常不会携带Content-Type请求头,只有POST、PUT等携带请求体的请求才会包含该字段,如果你用GET请求测试时打印结果为undefined属于正常现象。
修改后的完整参考代码:
var http = require("http"); var fs = require("fs"); var server = http.createServer(function(request, response) { var temp = fs.readFileSync("/sys/class/thermal/thermal_zone0/temp"); var temp_c = temp/1000; var header = request.headers['content-type']; console.log(header); response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Raspberry Pi cpu temperature: "); response.write("\n" + temp); response.write("\n" + temp_c); response.end(); }); server.listen(8080);
内容的提问来源于stack exchange,提问作者gre4ka play
相关产品推荐
相关产品推荐

