javascript - 如何使用 nextjs 和 contentful 按年/月获取帖子?
问题描述
我正在使用 Contentful CMS 使用 Next.js 创建一个博客。
我的文件夹结构现在看起来像这样pages/blog/[year]/[month]/[slug].js
年月文件夹各有自己的 index.js
现在我正在研究它的年份部分,这就是我生成包含任何博客文章的所有年份的路径的方式。
export async function getStaticPaths() {
let data = await client.getEntries({
content_type: 'blog_post',
select: 'sys.id,fields.publishDate',
limit: 1000,
})
const allYears = data.items
.map((item) => moment(item.fields.publishDate).format('YYYY'))
.sort()
// Get unique values.
const years = [...new Set(allYears)]
// Create paths.
const paths = years.map((year) => {
return {
params: { year },
}
})
return {
paths,
fallback: false,
}
}
到目前为止一切顺利,但我不知道如何在 getStaticProps 中查询我的内容帖子?也许内容不支持它?我能做到的唯一另一种方法是手动过滤所有帖子,但这感觉不是正确的方法。
export async function getStaticProps({ params: { year } }) {
let data = await client.getEntries({
content_type: 'blog_post',
// I assume I somehow have to pass my year in the query
})
return {
props: {
data,
},
}
}
内容返回日期字符串如下:2021-03-03T00:00+01:00
所以我的问题是,我怎样才能最好地解决这个问题?有没有人遇到过同样的问题?
解决方案
您可以使用字段上的范围运算符pusblishDate
将结果过滤到给定年份。
export async function getStaticProps({ params: { year } }) {
const nextYear = parseInt(year, 10) + 1 // May need to parse if `year` is a string
let data = await client.getEntries({
content_type: 'blog_post',
'fields.publishDate[gte]': `${year}-01-01T00:00:00Z`,
'fields.publishDate[lt]': `${nextYear}-01-01T00:00:00Z`
})
return {
props: { data }
}
}
推荐阅读
- android - 使用引用资源 ID 的声音 URI 时,Android 通知通道声音停止工作
- login - 在 PHP 中验证密码哈希
- visual-studio-code - Windows 系统还原后如何让 VSCode 调试工作?
- sql - 在数值字段上使用 NOT IN
- ios - 适用于 iOS 的 FirebaseAuthUI。如何将身份验证提供程序链接到用户帐户
- python - 我可以在树莓派上同时运行多少个 py 脚本?
- python - 在 Windows 中的 Tensorflow 上加载经过训练的 ResNet 50 网络
- javascript - 使用 .toUpperCase 和 .slice 将首字母大写不起作用
- mysql - 如何使用 MySQL 从数据库中的所有表中提取前几行?
- python - 如何在 django 中有一个地址字段?