#reactjs #next.js
#реагирует на #next.js
Вопрос:
Я хочу добавить server-sitemap.xml в мое следующее приложение js с помощью next-sitemap я буду признателен, если кто-нибудь сможет объяснить, как я могу добавить динамическую карту сайта с помощью next-sitemap в nextjs.
import { GetServerSideProps } from "next" import { getServerSideSitemap,ISitemapField } from "next-sitemap" const { all_product_get } = require("../../src/api/guest") export const getServerSideProps = GetServerSideProps async (ctx) =gt; { let data = [] await all_product_get().then(res =gt; { data : res.data.data }) const fields :ISitemapField[] = data.map(item =gt; ({loc :`https://sivanland.com/product/detail/${item._id}`, lastmod: new Date().toISOString()})) return getServerSideSitemap(ctx, fields); }; export default function Site(){}
Комментарии:
1. Что вы пробовали, а что не работает?
Ответ №1:
Я решил ее сам.
- Добавьте машинописный текст в мой проект:
npm i -D typescript
- Добавить
tsconfig.json
в корневой каталог проекта - Используйте TypeScript в NextJS.
tsconfig.json:
{ "compilerOptions": { "allowJs": true, "allowSyntheticDefaultImports": true, "jsx": "preserve", "lib": [ "dom", "es2017" ], "module": "esnext", "moduleResolution": "node", "noEmit": true, "noUnusedLocals": true, "noUnusedParameters": true, "preserveConstEnums": true, "removeComments": false, "skipLibCheck": true, "sourceMap": true, "strict": true, "target": "esnext", "forceConsistentCasingInFileNames": true, "esModuleInterop": true, "resolveJsonModule": true, "isolatedModules": true, "incremental": true }, "exclude": [ "node_modules" ], "include": [ "next-env.d.ts", "**/*.ts", "**/*.tsx" ] }
- Затем я использовал приведенный выше код с динамическими данными из базы данных:
import { getServerSideSitemap, ISitemapField } from 'next-sitemap' import { GetServerSideProps } from 'next' export const getServerSideProps: GetServerSideProps = async (ctx) =gt; { // Method to source urls from cms const response = await fetch('https://newapi.example.com/api/guest/search /product/all'); let items: any = {} items = await response.json(); const fields: ISitemapField[] = items.data.map((item: any) =gt; ({ loc: `https://www.example.com/product/detail/${item._id}`, lastmod: new Date().toISOString(), changefreq: 'daily', priority: '0.7' })); return getServerSideSitemap(ctx, fields) } export default function Site() { }
- Добавить папку: страницы/сервер-карта сайта.xml/индекс.tsx
- и вставьте приведенный выше код в файл index.tsx
- Добавьте адрес карты сайта в next-sitemap.gonfig.js
additionalSitemaps: [ 'https://example.com/sitemap.xml', 'https://example.com/server-sitemap.xml' ]