module - 根据 Nuxt 中的棱镜数据生成站点地图
问题描述
我猜你们中的一些人在为您的项目生成站点地图方面有一些经验。我有一个 Nuxt ( SSR full static ) 项目。我正在使用@nuxtjs/prismic 和@nuxtjs/sitemap 模块。
站点地图模块不生成动态页面,因此我们需要异步检索网站上的所有页面,并将数据处理成站点地图模块所需的格式。
我猜我需要编写一些构建模块,在那里我可以访问 prismic,然后生成并编写所需的数据格式。
请帮助我了解如何从模块级别导入或访问棱镜,以便我可以编写所需的逻辑。
更新 我创建了构建模块并将其注册在 nuxt.config.js 中。成功从 prismic 查询中检索数据。在下面的代码中 在我的循环中,我将棱镜数据转换为站点地图模块所需的数据格式。
我将数据传递给站点地图模块this.nuxt
。现在这段代码传递了正确的数据,但是模块覆盖了静态页面,剩下的唯一正确的数据是动态页面。看起来我需要禁用模块的自动生成,并且只能使用我的数据。
// ... all dynamic pages generated correctly
<url>
<loc>https://danica-dev.netlify.app/blog/arrival-of-ikea-in-ukraine</loc>
<lastmod>2021-05-01T14:00:04.000Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.3</priority>
</url>
<url>
<loc>https://danica-dev.netlify.app/en</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/kontakt</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/privacy-policy</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/en/blog</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/en/contact</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/en/privacy-policy</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/en/projects</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru/blog</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru/kontakt</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru/privacy-policy</loc>
</url>
<url>
<loc>https://danica-dev.netlify.app/ru/projects</loc>
</url>
// modules/sitemap.js
import prismic from '@prismicio/client'
const apiEndpoint = 'https://danica.cdn.prismic.io/api/v2'
const client = prismic.client(apiEndpoint)
export default async function Sitemap() {
const data = await client.query('', { pageSize: 100 })
const pages = []
data.results.forEach((page) => {
switch (page.type) {
case 'blog_post':
pages.push({
url: `blog/${page.uid}`,
changefreq: 'weekly',
priority: 0.25,
lastmod: page.last_publication_date,
})
break
case 'project_post':
pages.push({
url: `projects/${page.uid}`,
changefreq: 'monthly',
priority: 0.5,
lastmod: page.last_publication_date,
})
break
//...
default:
break
}
})
this.nuxt.options.sitemap.routes = pages
}
解决方案
推荐阅读
- hashmap - 查找重复项的方法 - Kafka 和队列
- java - JTextField 和 DefaultButton 关于 ENTER 键消耗
- c++ - Intellisense 弹出数千个错误
- java - java - 如何将用户定义的数据类型中的值插入到java中的对象?
- google-sheets - 谷歌脚本对齐文本位置
- javascript - 我可以使用 messageEmbed 退货吗?
- python - 选择排序的for循环传递问题
- sql-server - 无法使用彼此的外键创建表
- python - asyncio Queue - 使用常规生成器插入项目 - 令人困惑的行为,意外的值
- server - DataTables 警告:表 id=user_data - Ajax 错误。有关此错误的更多信息,请参阅 http://datatables.net/tn/7