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

如何在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补全fetch API:
    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及以上版本已内置fetch API,无需安装node-fetch
  • 确保你的session cookie是有效的,否则请求会返回403权限错误

内容的提问来源于stack exchange,提问作者Tyler Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:31:41