Javascript Next.js 9.3+;并赶上所有路线

Javascript Next.js 9.3+;并赶上所有路线,javascript,next.js,blogs,getstaticprops,getstaticpaths,Javascript,Next.js,Blogs,Getstaticprops,Getstaticpaths,这里是Next.js初学者,希望能找到使用getstaticpath和getStaticProps和catch-all-routes的指针。大多数Next.js 9.3+博客发帖人似乎只基于一个级别的博客帖子(例如,/posts/post-1.md,/posts/post-2.md,等等),但我试图找到的是一个发帖人——或者只是一组指令——通过/pages/post/[…post]解决处理问题,比如说,/posts/yyyyy/mm/postname.md.js 当然,我确实阅读了Next.js

这里是Next.js初学者,希望能找到使用
getstaticpath
getStaticProps
和catch-all-routes的指针。大多数Next.js 9.3+博客发帖人似乎只基于一个级别的博客帖子(例如,
/posts/post-1.md
/posts/post-2.md
,等等),但我试图找到的是一个发帖人——或者只是一组指令——通过
/pages/post/[…post]解决处理问题,比如说,
/posts/yyyyy/mm/postname.md
.js

当然,我确实阅读了Next.js文档中关于这些项目的内容,但我发现至少在这种特殊情况下,它们还有些不足。我知道它们是为更有经验的Next.js开发人员编写的。这一个项目,从,让我尽可能接近我目前能,但还不够远:

如果页面名称使用catch all routes,例如
pages/[…slug]
,则
params
应包含
slug
,它是一个数组。例如,如果此数组是
['foo','bar']
,则Next.js将在
/foo/bar
处静态生成页面


我尝试使用
fs readdir recursive
来读取
/posts/
目录的各个级别,这是可行的,但是它提供给我的并没有产生
getstaticpath
想要的数组。我肯定我只需要按摩一下结果,但找不到任何例子来帮助我弄清楚。(大多数比一级场景更深入的示例似乎都涉及从DBs获取,可能是因为我试图找到的场景被认为太简单了。可能是,对于非初学者来说,但是…

如果您的帖子都遵循相同的URL模式,我宁愿使用以下结构:

页面/
└── 职位/
└── [年度]/
└── [月份]/
└── [slug].js
根据您存储帖子的方式,您的
getstaticpath
只需列出帖子并为每个帖子公开
year
month
slug

导出异步函数getStaticPaths(){
const posts=await getAllPosts()
返回{
后退:错误,
路径:posts.map(post=>({
参数:{
年份:年后,
月份:月后,
slug:post.slug
}
})
}
}
然后您可以访问
getStaticProps
中的所有
slug
参数

导出异步函数getStaticProps({params}){
//从年、月和slug中检索博客文章
const post=等待getBlogPost({
年份:年,
月份:参数月份,
slug:params.slug
})
返回{
道具:{
邮递
}
}
}

如果您的帖子都遵循相同的URL模式,我宁愿使用以下结构:

页面/
└── 职位/
└── [年度]/
└── [月份]/
└── [slug].js
根据您存储帖子的方式,您的
getstaticpath
只需列出帖子并为每个帖子公开
year
month
slug

导出异步函数getStaticPaths(){
const posts=await getAllPosts()
返回{
后退:错误,
路径:posts.map(post=>({
参数:{
年份:年后,
月份:月后,
slug:post.slug
}
})
}
}
然后您可以访问
getStaticProps
中的所有
slug
参数

导出异步函数getStaticProps({params}){
//从年、月和slug中检索博客文章
const post=等待getBlogPost({
年份:年,
月份:参数月份,
slug:params.slug
})
返回{
道具:{
邮递
}
}
}

谢谢你,贝特朗。这确实是我通常的模式,但我无法从文档中判断有多少项目可以“加载”到其中,可以说。我将尝试一下。我已经尝试了
[year]
[month]
文件夹但由于某些原因发生冲突。这是有道理的。我想我想知道
getAllPosts
-对于大多数初学者来说,它似乎使用
fs.readdirSync(“/path/to/posts”)
-可以与
fs readdir recursive
一起使用,从repo的根级别向下移动多个级别,以获取帖子的标记文件。
getAllPosts
可以是您想要的任何内容,递归(或不递归)列出文件,从数据库检索数据,从远程API获取数据。最终都将是静态的。我也处于同样的情况,我仔细阅读了文档,但它们有点短。在实施上述解决方案时,我仍然会出错。谢谢你,Bertrand。这确实是我通常的模式,但我无法从文档中判断可以包含多少项可以说,“加载”在里面的内容中。我会尝试一下。我曾经尝试过
[year]
[month]
文件夹,但由于某种原因发生了冲突。这是有道理的。我想我当时想知道
getAllPosts
-对于大多数初学者来说,它似乎使用了
fs.readdirSync(“/path/to/posts”)
-可以与
fs readdir recursive
一起使用,从repo的根级别向下移动多个级别,以获取帖子的标记文件。
getAllPosts
可以是您想要的任何内容,递归(或不递归)列出文件,从数据库检索数据,从远程API获取数据。最终都将是静态的。我也处于同样的情况,我仔细阅读了文档,但它们有点短。在实施上述解决方案时,我仍然会出错。