Node.js中使用Headers对象报错ReferenceError: Headers is not defined求助
解决
ReferenceError: Headers is not defined错误 错误原因
Headers是浏览器环境专属的API,你的代码运行在Node.js环境中,Node.js默认不全局提供这个对象,因此触发该错误。另外,Node.js在v18版本之前也没有内置fetchAPI,这也是需要注意的潜在问题。
解决方法
方法一:直接用普通对象定义请求头(无需额外依赖)
不需要使用Headers,请求头本质可以用普通键值对对象替代,代码修改如下:
var requestOptions = { method: 'GET', redirect: 'follow', headers: { "apikey": "the API key is here" } }; // Node.js v18及以上版本可直接使用fetch;若版本低于v18,建议用方法二 const data = fetch("https://api.apilayer.com/fixer/timeseries?start_date=2021-01-01&end_date=2021-12-31", requestOptions) .then(response => response.text()) .then(result => { console.log(result); // 在这里处理返回结果,避免异步时序问题 return result; }) .catch(error => console.log('error', error));
方法二:安装node-fetch兼容浏览器API(适合低版本Node.js)
如果需要继续使用Headers和fetch,可以安装node-fetch包:
- 安装依赖:
npm install node-fetch@2
(选择v2版本是因为它支持CommonJS模块,无需修改package.json配置)
- 修改代码导入对应模块:
const fetch = require('node-fetch'); const Headers = fetch.Headers; var myHeaders = new Headers(); myHeaders.append("apikey", "the API key is here"); var requestOptions = { method: 'GET', redirect: 'follow', headers: myHeaders }; const data = fetch("https://api.apilayer.com/fixer/timeseries?start_date=2021-01-01&end_date=2021-12-31", requestOptions) .then(response => response.text()) .then(result => { console.log(result); return result; }) .catch(error => console.log('error', error));
额外提示
原代码中console.log(requestOptions)会在fetch请求完成前执行,因为fetch是异步操作。如果需要查看请求结果,务必在then回调内处理。
内容的提问来源于stack exchange,提问作者MR. potato35
相关产品推荐
相关产品推荐

