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

Node.js(Express)无法获取Google Docs HTML响应,Postman可正常请求

问题:Node.js(Express)中Axios请求Google Docs HTML返回null,但控制台能打印内容

我想获取Google Docs的HTML文件,后续用来结合自定义JSON数据。已将文档设置为公开可编辑状态,直接通过Google提供的链接在Postman中请求可正常获取HTML响应,但在Node.js(Express)项目中使用Axios请求时,Postman返回null错误,控制台却能正常打印出HTML内容,请问问题出在哪里?

Google Docs请求链接

https://docs.google.com/document/d/1us5_NdOHrbdWuVhtx8l-oNXGa7IxOWf_5JuexGJVMcw/edit

我的代码

const res = await axios.get(`https://docs.google.com/document/d/${docId}/edit`).then(response =>{
  return JSON.stringify(response.data)
})

问题原因分析

  • 异步处理写法冲突:同时使用await和.then()会导致Promise处理逻辑混乱,await已经会等待请求完成并返回结果,嵌套的.then()会让返回值的处理层级出错,最终可能导致res值不符合预期。
  • 大文本序列化失败:Google Docs的HTML内容包含大量特殊字符(如未转义的引号、换行符),直接用JSON.stringify()处理时会触发序列化失败,最终返回null;而控制台打印时会自动兼容这些特殊字符,所以能正常显示内容。

解决方案

  1. 统一异步处理方式,只用await:
const response = await axios.get(`https://docs.google.com/document/d/${docId}/edit`);
// 直接使用response.data,若需返回给前端,直接返回即可,无需额外序列化
  1. 若必须序列化HTML内容,先对特殊字符做转义处理:
const response = await axios.get(`https://docs.google.com/document/d/${docId}/edit`);
const escapedHtml = response.data.replace(/"/g, '\\"').replace(/\n/g, '\\n');
const res = JSON.stringify(escapedHtml);
  1. 添加请求头模拟浏览器请求,避免被Google反爬机制拦截:
const response = await axios.get(`https://docs.google.com/document/d/${docId}/edit`, {
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:00:09