如何在Node.js中从URL获取原始文本?解决顶层await报错问题
解决方案:Node.js中顶层await报错问题
问题原因
浏览器开发者工具默认支持顶层await,但Node.js的模块系统对顶层await有明确限制:默认的CommonJS模块不支持顶层await,仅ES模块(ESM)允许使用;同时Node.js 18版本以下没有内置fetch API,这也是潜在的运行障碍。
方案1:启用ES模块,使用顶层await
让Node.js将文件识别为ES模块,即可直接使用顶层await,步骤如下:
- 方式一:将文件后缀改为
.mjs - 方式二:在项目根目录的
package.json中添加配置:"type": "module" - 若你的Node.js版本低于18,需先安装
node-fetch补全fetchAPI:npm install node-fetch
修改后的代码示例:
// Node.js版本<18时需导入fetch,18+版本可省略 import fetch from 'node-fetch'; async function fetchData() { let response = await fetch('https://adventofcode.com/2022/day/1/input', { method: 'GET', headers: { cookie: 'session=xxx', }, }); let data = await response.text(); return data; } const data = await fetchData(); export default data;
方案2:用立即执行异步函数包裹(适配CommonJS)
如果不想修改模块类型,可将顶层await逻辑包裹在异步立即执行函数(IIFE)中,同时改用CommonJS的导出方式:
- 同样,Node.js版本低于18时需安装
node-fetch:npm install node-fetch
修改后的代码示例:
// Node.js版本<18时需导入fetch,18+版本可省略 const fetch = require('node-fetch'); async function fetchData() { let response = await fetch('https://adventofcode.com/2022/day/1/input', { method: 'GET', headers: { cookie: 'session=xxx', }, }); let data = await response.text(); return data; } // 用IIFE执行异步逻辑并导出数据 (async () => { const data = await fetchData(); module.exports = data; })();
额外注意事项
- Node.js 18及以上版本已内置
fetchAPI,无需安装node-fetch - 确保你的
sessioncookie是有效的,否则请求会返回403权限错误
内容的提问来源于stack exchange,提问作者Tyler Morales
相关产品推荐
相关产品推荐

