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

Axios发起Basic Authentication请求返回400及Promise报错如何解决

问题分析
  • 未处理Promise rejection报错原因:
    你使用了Express的异步路由处理函数,在catch块中直接抛出错误,但Express原生无法自动捕获异步函数中抛出的异常,这个抛出的错误没有对应的捕获逻辑,因此触发了UnhandledPromiseRejectionWarning警告。此外你存在变量名冲突的问题:路由处理函数的响应参数已经命名为res,后续axios请求的返回值也命名为res,会覆盖外层的Express响应对象,你直接return res.data的操作无法将结果返回给客户端,也会引发后续逻辑异常。
  • 400 Bad Request原因:
    按照Epic Games OAuth2接口的规范,authorization_code模式下需要将client_id和client_secret通过Basic Authentication请求头传递,而非放在请求体中。你当前将client_id、client_secret放在了URLSearchParams请求体中,不符合接口要求,是触发400错误的常见原因。另外你当前仅打印了error.message,无法查看Epic接口返回的完整错误提示,无法定位参数缺失、code无效等其他可能的400原因。
修复方案

修复后代码如下:

import express, { Request, Response, NextFunction } from 'express';
import axios from 'axios';

// 请提前正确赋值client_id和client_secret
const client_id = "你的客户端ID";
const client_secret = "你的客户端密钥";

app.post('/epic', async (req: Request, res: Response, next: NextFunction) => {
  const code = req.query.code as string;
  const url = "https://api.epicgames.dev/epic/oauth/v1/token";
  // 构造Basic Auth凭证
  const basicAuth = Buffer.from(`${client_id}:${client_secret}`).toString('base64');
  const values = new URLSearchParams({
    code,
    scope: "basic_profile",
    grant_type: "authorization_code",
  });

  console.log(code, values);

  try {
    // 重命名axios返回值,避免和外层res冲突
    const axiosRes = await axios.post(url, values, {
      headers: {
        "Content-Type": "application/x-www-form-urlencoded",
        "Authorization": `Basic ${basicAuth}`
      },
    });
    console.log(axiosRes.data);
    // 通过Express响应对象返回结果给客户端
    return res.send(axiosRes.data);
  } catch (error: any) {
    // 打印完整的错误响应内容,排查400的具体原因
    console.error('接口请求错误:', error.response?.data || error.message);
    // 传递错误给Express错误处理中间件,避免未捕获的Promise异常
    next(error);
    // 也可以选择直接返回错误响应给客户端:
    // return res.status(400).send({error: error.response?.data || error.message})
  }
})

额外注意事项

  • 确保client_id、client_secret变量已经提前正确赋值,没有拼写错误
  • 确认传递的code参数没有过期,且是对应OAuth授权流程返回的有效授权码
  • 如果仍返回400错误,查看控制台打印的error.response.data内容,里面会有Epic接口返回的具体错误说明,比如invalid_grant、invalid_client等,可根据对应错误码进一步排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:06:03