質問編集履歴

2

修正

2021/12/25 03:32

投稿

matsuo_basho
matsuo_basho

スコア88

test CHANGED
File without changes
test CHANGED
@@ -59,3 +59,273 @@
59
59
  info - Generating static pages (3270/3270)
60
60
 
61
61
  ```
62
+
63
+
64
+
65
+
66
+
67
+ # 追記
68
+
69
+ 「複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました」とありました。
70
+
71
+ 以下がこちらで対応したことになります。
72
+
73
+
74
+
75
+ ・500エラーということでサーバー側に問題があるとみて、サーバー側のセキュリテイ対策をなくした
76
+
77
+ ・ソースコード上のビルド時にfetchするapiを1、2本に制限した
78
+
79
+ ・基本全てSSGで対応をしたく3270という数になっておりましたが、必要最低限のページのみ対応させることにいして、1618ページまで削減した
80
+
81
+
82
+
83
+ なお、該当のエラー箇所のソースコードは以下になります。
84
+
85
+
86
+
87
+ ```javascript
88
+
89
+ // lib
90
+
91
+ import {getPostsByTag, getTags} from "../../../../lib/posts";
92
+
93
+
94
+
95
+ // components
96
+
97
+ import Layout from "../../../../components/Layout";
98
+
99
+ import Post from "../../../../components/Post";
100
+
101
+ import Pagination, {PER_PAGE, range} from "../../../../components/Pagination";
102
+
103
+ import Seo from "../../../../components/Seo";
104
+
105
+ import {useRouter} from "next/router";
106
+
107
+
108
+
109
+
110
+
111
+ export default function PaginationPerPage({posts, postsCount, archiveType, tagName, slug, currentPageNum}) {
112
+
113
+
114
+
115
+ const router = useRouter()
116
+
117
+ if (router.isFallback) {
118
+
119
+ return <div>Loading...</div>
120
+
121
+ }
122
+
123
+
124
+
125
+ return (
126
+
127
+ <>
128
+
129
+ {/*--------------------- SEO ---------------------*/}
130
+
131
+ <Seo title={`${tagName} - ${currentPageNum}ページ`} description={`${tagName}記事一覧です。`}/>
132
+
133
+
134
+
135
+ {/*--------------------- main ---------------------*/}
136
+
137
+ <Layout slug="archive">
138
+
139
+
140
+
141
+ <h1>{tagName}<span className='pagination__num'>{currentPageNum}ページ</span></h1>
142
+
143
+
144
+
145
+ <div className="posts">
146
+
147
+ {posts && posts.map((post) => <Post key={post.id} post={post}/>)}
148
+
149
+ </div>
150
+
151
+
152
+
153
+ <Pagination
154
+
155
+ postsCount={postsCount}
156
+
157
+ archiveType={archiveType}
158
+
159
+ slug={slug}
160
+
161
+ currentPageNum={currentPageNum}
162
+
163
+ />
164
+
165
+
166
+
167
+ </Layout>
168
+
169
+ </>
170
+
171
+ )
172
+
173
+ }
174
+
175
+
176
+
177
+ export const getStaticPaths = async () => {
178
+
179
+
180
+
181
+ /* ------- タグ一覧取得 ------- */
182
+
183
+ const fetchedTags = await getTags();
184
+
185
+ const tags = fetchedTags.tags;
186
+
187
+
188
+
189
+ let paths = [];
190
+
191
+
192
+
193
+ /* ------- paths を作成 ------- */
194
+
195
+ for (const tag of tags) {
196
+
197
+
198
+
199
+ let unitPaths = [];
200
+
201
+
202
+
203
+ let slug = tag.name;
204
+
205
+ let postsCount = tag.count;
206
+
207
+ const pageCount = range(1, Math.ceil(postsCount / PER_PAGE));
208
+
209
+
210
+
211
+ unitPaths = pageCount.map((num) => {
212
+
213
+ return {
214
+
215
+ params: {
216
+
217
+ tag : slug,
218
+
219
+ page: String(num)
220
+
221
+ }
222
+
223
+ }
224
+
225
+ })
226
+
227
+
228
+
229
+ paths = paths.concat(unitPaths);
230
+
231
+
232
+
233
+ }
234
+
235
+
236
+
237
+
238
+
239
+ return {
240
+
241
+ paths,
242
+
243
+ fallback: true
244
+
245
+ };
246
+
247
+ }
248
+
249
+
250
+
251
+
252
+
253
+ export async function getStaticProps({params}) {
254
+
255
+
256
+
257
+
258
+
259
+ /* ------- URL からパラメータ取得 ------- */
260
+
261
+ const slug = params.tag;
262
+
263
+ const pageNum = params.page;
264
+
265
+ const currentPageNum = pageNum;
266
+
267
+ const archiveType = "tags";
268
+
269
+
270
+
271
+ /* ------- 現在のタグ情報を取得 ------- */
272
+
273
+ const fetchedTags = await getTags();
274
+
275
+ const tags = fetchedTags.tags;
276
+
277
+
278
+
279
+ // 日本語とローマ字でマッチしない場合があるので、どちらでも対応させる
280
+
281
+ const tag = tags.filter(tag => tag.slug === slug || tag.name === slug)
282
+
283
+ const tagName = tag[0].name;
284
+
285
+ const tagId = tag[0].term_id;
286
+
287
+
288
+
289
+
290
+
291
+ /* ------- タグに紐づく記事全てを取得してページネーションを作成 ------- */
292
+
293
+ const fetchedAllPosts = await getPostsByTag({
294
+
295
+ "tagId": tagId, "postsPerPage": -1
296
+
297
+ });
298
+
299
+
300
+
301
+ const postsCount = fetchedAllPosts.count;
302
+
303
+
304
+
305
+
306
+
307
+ /* ------- 1ページあたりの記事数を取得 ------- */
308
+
309
+ const fetchedPosts = await getPostsByTag({
310
+
311
+ "tagId": tagId, "pageNum": pageNum
312
+
313
+ });
314
+
315
+
316
+
317
+ const posts = fetchedPosts.posts;
318
+
319
+
320
+
321
+
322
+
323
+ return {
324
+
325
+ props: {posts, postsCount, archiveType, tagName, slug, currentPageNum},
326
+
327
+ };
328
+
329
+ }
330
+
331
+ ```

1

見出し修正

2021/12/25 03:32

投稿

matsuo_basho
matsuo_basho

スコア88

test CHANGED
@@ -1 +1 @@
1
- [Nextjs] ビルド時に出るエラーをスキップってできますか? Error: Request failed with status code 500
1
+ [再記] Nextjsビルド時に出るエラーをスキップってできますか? Error: Request failed with status code 500
test CHANGED
File without changes