TypeError:fields.map在使用next-sitemap进行下一个动态站点Map时不是函数

e3bfsja2  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(94)

我正在尝试为我的网站做动态网站Map,这里是我的代码:

import { GetServerSideProps } from 'next';
import { getServerSideSitemap, ISitemapField } from 'next-sitemap';
import { makeSlugFromString } from '../../lib/helpers';
import { BaseNCategories } from '../../lib/generalConstants';

export const getServerSideProps = async (ctx: any) => {
  const response = await fetch('http://baseapi/v3/category-list');
  const categoriesData = await response.json();
  const categories: any[] = categoriesData.cat;
  const categoryBn = BaseNCategories.filter((baseCategory) => {
    return categories.some((category) => category.CategoryID === baseCategory.CategoryID);
  });
  const fields: ISitemapField[] = categoryBn.map((category) => ({
    loc: `baseApi/${makeSlugFromString(category.Slag)}`,
    lastmod: new Date().toISOString(),
    // priority: 0.7,
    // changefreq: 'daily',
  }));
  console.log({ fields });
  return getServerSideSitemap(ctx, fields);
};

export default function Site() {}

字符串
我得到的错误是“field.map不是一个函数”我不知道为什么会这样。谁能帮我修好这个?

5w9g7ksd

5w9g7ksd1#

categoryBn不是一个数组因为categoryBn是使用filter函数从BaseNCategories派生的,所以它应该总是一个数组。但是,为了确保这一点,您可以在创建fields数组之前添加一个检查,以确保categoryBn确实是一个数组。
替换如下:

const fields: ISitemapField[] = categoryBn.map((category) => ({
  loc: `baseApi/${makeSlugFromString(category.Slag)}`,
  lastmod: new Date().toISOString(),
}));

字符串
用这个:

if (!Array.isArray(categoryBn)) {
  console.error('categoryBn is not an array:', categoryBn);
  return { notFound: true }; // Return a 404 page or an error page as needed.
}

const fields: ISitemapField[] = categoryBn.map((category) => ({
  loc: `baseApi/${makeSlugFromString(category.Slag)}`,
  lastmod: new Date().toISOString(),
}));

相关问题