現在JAMstackなブログを作るために
Next.js + microCMS + NetlifyでJAMstackな世界に入門する
上記の記事を参考にしながら進めています。
micro cmsを使い、fetchで記事をとって記事データなどを集めてきています。
ここでご質問なのですが、
buildをする際に、
> Build error occurred TypeError: Cannot read property 'map' of undefined at getStaticPaths (/Users/cawauchi/Desktop/blog/.next/server/pages/blogs/[id].js:156:32) at processTicksAndRejections (internal/process/task_queues.js:93:5) at async buildStaticPaths (/Users/cawauchi/Desktop/blog/node_modules/next/dist/build/utils.js:17:80) at async Object.isPageStatic (/Users/cawauchi/Desktop/blog/node_modules/next/dist/build/utils.js:24:549) { type: 'TypeError' }
といったエラーが起きてしまいます。
ちなみにnpm run devの場合だとエラーが起きず、意図したページが表示されます。
at getStaticPaths (/Users/cawauchi/Desktop/blog/.next/server/pages/blogs/[id].js:156:32)
とあるので
pages/[id].js
1import React from 'react' 2import fetch from 'isomorphic-unfetch'; 3 4const BlogId = ({ blog }) => { 5 return ( 6 <div> 7 <h1>{blog.title}</h1> 8 <div> 9 {blog.tags.map(tag => ( 10 <React.Fragment key={tag.id}> 11 <span>{tag.name}</span> 12 </React.Fragment> 13 ))} 14 </div> 15 <div dangerouslySetInnerHTML={{ __html: `${blog.body}` }}></div> 16 </div> 17 ); 18}; 19 20// パスを生み出している 21export const getStaticPaths = async () => { 22 const key = { 23 headers: { 'X-API-KEY': process.env.API_KEY }, 24 }; 25 26 const res = await fetch('エンドポイント', key); 27 const repos = await res.json(); 28 //ここでログ出してます 29 console.log(repos) 30 31 // 配列で/blogs/idを返す 32 const paths = repos.contents.map(repo => `/blogs/${repo.id}`); 33 return { paths, fallback: false }; 34}; 35 36// 内容を返す 37export const getStaticProps = async context => { 38 const id = context.params.id; 39 40 const key = { 41 headers: { 'X-API-KEY': process.env.API_KEY }, 42 }; 43 44 const res = await fetch( 45 `エンドポイント/${id}`, 46 key, 47 ); 48 const blog = await res.json(); 49 50 return { 51 props: { 52 blog: blog 53 } 54 }; 55}; 56 57export default BlogId; 58
const paths = repos.contents.map(repo => `/blogs/${repo.id}`);
この部分でundefinedを出していたと推測したので
console.log(repos)
を挟んでみたところ
{ contents: [ { id: 'zoskqppsn', createdAt: '2020-09-20T03:30:11.976Z', updatedAt: '2020-09-20T06:43:59.289Z', publishedAt: '2020-09-20T03:30:11.976Z', title: 'This is test', body: '<p><span style="font-size: 2.5em">これはテストです</span><br>これはテストテストテストテスト<br></p>', tags: [Array] } ], totalCount: 1, offset: 0, limit: 10 }
以下のようなオブジェクトが返されたので
const paths = repos.contents.map(repo => `/blogs/${repo.id}`);
こちらのrepos.contentsは配列であり、mapではundefinedにはならないと思うのですが解決方法がわからず詰まってしまっております。
アドバイスをいただけたらと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/20 13:12