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

Netlify函数中axios请求HTTPS API返回空对象{}问题排查

问题根因

你写的三个版本代码返回空对象,核心问题全是异步逻辑没有正确等待执行完成,附带少量语法笔误,和接口本身、跨域、鉴权都没关系——毕竟浏览器直连、Python requests、前端调用函数的代码都能正常跑:

  • 第一版代码:fetchData是异步函数,内部的axios.get既没有加await,也没有return这个Promise,调用fetchData()会立刻返回一个pending状态的Promise,把这个状态的Promise做JSON.stringify序列化结果就是空对象{},等axios请求真的拿到结果的时候,你的handler早就已经把响应返回给前端了
  • 简化版代码:直接把axios.get()返回的Promise对象塞进body做序列化,和上面的问题完全一样,根本没等请求跑完就返回了
  • 最初的版本:除了没给fetchData()调用加await之外,还有低级笔误:conlog.log拼写错误,正确写法是console.log,这个错误会直接触发运行时异常,根本跑不到拿结果的步骤
可直接运行的修复代码

这是适配Netlify Functions的正确写法,加了基础错误捕获方便排查问题:

import axios from "axios";

exports.handler = async function (event, context) {
  try {
    // 等待接口请求完成再往下走
    const apiRes = await axios.get("https://randomuser.me/api");
    return {
      statusCode: 200,
      headers: {
        "Content-Type": "application/json"
      },
      // axios默认会自动解析JSON响应,拿到的apiRes.data是JS对象,需要转成字符串返回
      body: JSON.stringify(apiRes.data)
    };
  } catch (err) {
    console.error("接口请求失败:", err);
    return {
      statusCode: 500,
      body: JSON.stringify({
        code: 500,
        msg: "获取数据失败"
      })
    }
  }
};
避坑要点
  • async函数里所有返回Promise的异步操作,只要你需要用到它的执行结果,就必须加await等它执行完,绝对不能直接把Promise对象序列化返回
  • Serverless函数(包括你用的Netlify Functions)的执行生命周期是跟着handler返回走的,handler一旦return,函数就会冻结/结束,后面的异步代码不会正常执行完
  • 写完代码注意检查拼写,类似console这种内置对象名拼错会直接导致运行时报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:57:24