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

NextJS根据搜索参数展示数据异常:控制台输出undefined求助

问题排查与解决方案

核心原因分析

控制台输出results为undefined,主要是以下几个环节出了问题:

1. 错误处理顺序错误

你原代码中先解析了响应体,再判断请求是否成功。如果请求失败(比如API密钥无效、参数非法),响应体可能没有results字段,导致data.results为undefined,且错误抛出不及时,最终将undefined传递给了组件。

2. 未处理搜索参数为空/不存在的场景

当URL中没有search查询参数时,context.query.search是undefined,直接拼入请求URL后,TMDB API返回的响应可能没有results字段,导致返回的props中results为undefined。

3. 未给results设置兜底值

无论请求结果如何,都没有给results设置默认空数组,导致组件接收的props可能是undefined。


修正后的代码

调整getServerSideProps逻辑

import Results from "components/Results";
import React from "react";

export async function getServerSideProps(context) {
  // 给搜索参数兜底空字符串,避免undefined
  const keyword = context.query.search || "";
  console.log("keyword " + keyword);

  const res = await fetch(
    `https://api.themoviedb.org/3/search/movie?api_key=${process.env.API_KEY}&query=${keyword}&language=en-US&include_adult=false`
  );

  // 先判断请求是否成功,再解析响应
  if (!res.ok) {
    throw new Error("oops movie not found");
  }

  const data = await res.json();
  // 给results兜底空数组,确保不会返回undefined
  const results = data.results || [];

  return {
    props: { results },
  };
}

优化组件逻辑

export default function searchTerm({ results = [] }) {
  console.log(results);

  return (
    <div>
      {results.length === 0 && (
        <h1 className="text-red-700 text-center">No movie found</h1>
      )}
      <Results results={results} />
    </div>
  );
}

额外检查点

  • 确认根目录的.env文件中正确配置了API_KEY,且开发服务器已重启(修改.env后需要重启服务才能生效)。
  • 测试时确保URL中携带?search=xxx参数,比如http://localhost:3000/search?search=batman。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:40:34