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

Next.js中如何展示API的所有成功与失败请求结果

实现方案

第一步:改造getServerSideProps逻辑

现有代码的核心问题是axios.all批量请求时,只要有一个角色查询失败触发404,整个请求队列就会直接抛出异常终止,同时返回的结果没有和输入的角色名绑定,无法对应展示每个输入的查询状态。改造逻辑如下:

  • 给每个单独的角色查询请求添加异常捕获,避免单个查询失败影响其余请求
  • 每个请求的返回结果绑定对应的输入角色名,方便后续对应展示
  • 拆分查询成功的结果列表、未查询到结果的角色列表,一同传给页面组件

改造后的代码如下:

export const getServerSideProps: GetServerSideProps = async (context) => {
  const { name } = context.query;
  // 拆分角色名同时去除输入的前后空格,避免空格导致查询失败
  const nameArray = (name as string).split(',').map(item => item.trim());

  const allRequest = nameArray.map((inputName) => 
    axios.get(`https://rickandmortyapi.com/api/character/?name=${inputName}`)
      .then(res => ({
        inputName,
        success: true,
        data: res.data.results
      }))
      .catch(() => ({
        inputName,
        success: false,
        data: null
      }))
  );

  const requestResults = await Promise.all(allRequest);
  // 拆分成功、失败列表
  const successList = requestResults.filter(item => item.success);
  const failedList = requestResults.filter(item => !item.success).map(item => item.inputName);

  return ({
    props: {
      successList,
      failedList,
    },
  });
};

第二步:页面组件渲染逻辑

拿到props返回的两个列表后,按照需求分别渲染即可,示例代码如下:

export default function CharacterPage({ successList, failedList }: {
  successList: Array<{ inputName: string, data: any[] }>,
  failedList: string[]
}) {
  return (
    <div>
      <h2>查询结果</h2>
      {successList.map(item => (
        <div key={item.inputName}>
          {/* 按需求格式展示输入内容和返回结果,可自行替换为自定义的字段渲染逻辑 */}
          {item.inputName} --- {JSON.stringify(item.data)}
        </div>
      ))}

      {failedList.length > 0 && (
        <>
          <h2>未查询到结果的角色</h2>
          <ul>
            {failedList.map(name => (
              <li key={name}>{name}</li>
            ))}
          </ul>
        </>
      )}
    </div>
  )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:06:05