我的getResourcesDetail在Next JS中失败

xesrikrc  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(79)

我想在下面的/resource/[slug]/page.tsx中尝试getResourcesDetail,但出现错误“Error:无法读取null的属性(阅读“title”)"。
我试着这样给予问号“资源?.title”,错误消失,但标题内容不显示。
使用Next JS和Sanity

import { getResourcesDetail } from "@/sanity/actions";

type Props = {
  params: { slug: string };
};

async function Resource({ params }: Props) {
  const slug = params.slug;
  const resources = await getResourcesDetail(slug);
  console.log(resources);

  return (
    <section>
      <div className="text-white max-w-2xl">
        <div className="text-white max-w-2xl">
          <p>{slug}</p>
          <p>{resources?.title}</p>
        </div>
      </div>
    </section>
  );
}

export default Resource;

这是我的sanity文件夹中的action.ts

export async function getResourcesDetail(slug: string) {
  try {
    const resources = await readClient.fetch(
      groq`
      *[_type == 'resource' && slug.current == $slug][0]
      {
        _id,
        title,
        downloadLink,
        "image": poster.asset->url,
        views,
        category,
        "slug" : slug.current,
      }
      `,
      { slug }
    );

    return resources;
  } catch (error) {
    console.log(error);
  }
}

我希望从理智获得的标题出现。

3wabscal

3wabscal1#

resources记录到控制台以查看getResourcesDetail是否成功获取数据。如果它打印null,则意味着fetch没有返回任何数据。检查传入Sanity客户端的查询,假设变量readClientslug在代码中的其他位置已正确定义和配置。

export async function getResourcesDetail(slug: string) {
  try {
    const resources = await readClient.fetch(
      groq`
      *[_type == 'resource' && slug.current == $slug][0]
      {
        _id,
        title,
        downloadLink,
        "image": poster.asset->url,
        views,
        category,
        "slug" : slug.current,
      }
      `,
      { slug }
    );
    console.log(resources)  <--- console.log the resources here
    return resources;
  } catch (error) {
    console.log(error);
  }
}

相关问题