无法从 Strapi 检索标题

Cannot retrieve Title from Strapi

我有 collection 个名为 posts 的类型,它具有以下值:

现在获取 api 我的 lib 文件夹中有一个文件,其中包含以下代码:

export async function getPosts() {
var api_base_url = process.env.API_BASE_URL;
const response = await fetch(api_base_url + "/posts");
const posts = await response.json();
return posts;
}

export async function getPost(postId) {
    var api_base_url = process.env.API_BASE_URL;
    const response = await fetch(api_base_url + "/posts/" + postId);
    const post = await response.json();
    return post;
}

export async function getPostFromTitle(postTitle, lang) {
    var api_base_url = process.env.API_BASE_URL;
    const response = await fetch(api_base_url + "/posts");
    const posts = await response.json();
    var postObject = {};
    posts.forEach(post => {
        if (post['Title (' + lang.toUpperCase() + ')'] == postTitle) {
            postObject = post;
        }
    });
    return postObject;
}

现在要显示它,我使用了以下代码:

import { getPosts, getPostFromTitle } from '../lib/apiGet'

export async function getStaticProps() {
  const allPosts = JSON.parse(JSON.stringify(await getPosts()));
  const postsTitle = JSON.parse(JSON.stringify(await getPostFromTitle(postTitle, lang)));
  //Parse and Stringify done since nextJs was having weird errors accepting the standard json from API
  return {
    props: {
      allPosts,
      postsTitle
    }
  }
}

export default function Home({ allPosts, postsTitle }) {
  return (
    <div>
      <body>            
        <ul>
        {allPosts.map(post => (
            <h1><u>
            {console.log(post.id)}
              {post.id}
            </u>            
            </h1>
          ))}
        </ul>
        <ul>
        {postsTitle.map((postTitle, lang) => (
            <h1><u>
            {console.log(postTitle.Title)}
              {postTitle.Title}
            </u>            
            </h1>
          ))}
        </ul>
      </body>
    </div>
  );
}

我能够正确获取 ID,但是当我打印标题时出现此错误。

那么如何正确检索我的标题?

我认为问题可能出在您的前端函数中;

export async function getPostFromTitle(postTitle, lang) {
    var api_base_url = process.env.API_BASE_URL;
    const response = await fetch(api_base_url + "/posts");
    const posts = await response.json();
    var postObject = {};
    posts.forEach(post => {
        if (post['Title (' + lang.toUpperCase() + ')'] == postTitle) {
            postObject = post;
        }
    });
    return postObject;
}

它可能不会产生任何结果 post - 我会调试该函数。 “posts”常量是否包含有效对象? return 值看起来正确还是未定义?

一般来说,你重写函数的过滤部分(await response.json();以外的部分)使用js过滤功能会简单很多。

有点像;

return posts.filter(post => post['...'].includes(postTitle));