質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

0回答

799閲覧

Nuxt.js/JAMstackサイトのルーティングで401エラーが発生します。

sashimi_suki_

総合スコア12

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

0クリップ

投稿2021/06/07 10:25

編集2021/06/08 01:11

Nuxt.jsを利用したJAMstack構成のサイト作成をしています。
下記の記事などを参考に記事一覧、記事詳細ページの作成をしていたところ401エラーが発生してしまいました。
https://blog.microcms.io/microcms-nuxt-jamstack-blog/
(「4. ブログ詳細を表示する」辺りまで)

参考記事と違い、

page ∟index.vue ∟blogs/ ∟index.vue ∟_slug/ ∟index.vue

というようなページ構成にしたところ、遷移URLは「http://localhost:3000/blogs/blog_id」のように期待した通りのURLが生成されるのですが、アクセス時に401エラーとなってしまいます。
そのままページリロードを行うと、今度は正しいコンテンツが表示されるような状態です。
nuxt.config.jsのrouter項目は今のところ何も記述していません。
下記が_slugディレクトリのindex.vueファイル内容になります。

<template> <div class="container"> <base-main-visual /> <h1 class="title">{{ title }}</h1> <p class="publishedAt">{{ publishedAt }}</p> <div class="post" v-html="content"></div> </div> </template> <script> import axios from 'axios' export default { async asyncData({ params, $config }) { const { data } = await axios.get( `${$config.apiUrl}/blog/${params.slug}`, { headers: { 'X-API-KEY': $config.apiKey } } ) return data } } </script>

これまで.envに記載したエンドポイントURLとKEYを環境変数として読み込んでいたのですが、ここを直書きすると事態は改善されることに気づきました。
ただこの方法だとエンドポイントURLとKEYをだれでも見ることができるので好ましくないという話も聞き、解決できていません。

<template>  ~~~~略~~~~ </template> <script> import axios from 'axios' export default { async asyncData({ params, $config }) { const { data } = await axios.get( `https://your-service-id.microcms.io/api/v1/blog/${params.slug}`, { headers: { 'X-API-KEY': 'your-api-key' } } ) return data } } </script>

解決方法を教えていただけるとありがたいです。
よろしくお願いいたします。

===追記===
もともと別の資料を参考にしていたため、今回参考にしたサイトと若干記述が違う部分があるので確認のためにも追記。
上が問題なく稼働している他ページでのasyncDataの記述。

<script> async asyncData({ $config }) { const blog = await axios.get( `${$config.apiUrl}/blog`, { headers: { 'X-API-KEY': $config.apiKey }, } ) return { blogItems: blog.data, } }, </script>

今回の参考サイトを既存コードと合わせるような形に変更。
この際Vueのデベロッパーツールで確認するとblogItemsがundifinedなので、asyncDataの引数指定記述などに問題がある可能性。
ただエラーは出ていない。
初回表示は401エラー、ページリロードするとコンテンツが表示される。

<script> async asyncData({ params, $config }) { const blog = await axios.get( `${$config.apiUrl}/blog/${params.slug}`, { headers: { 'X-API-KEY': $config.apiKey }, } ) return { blogItems: blog.data, } }, </script>

こうすると問題なく動く。

<script> async asyncData({ params }) { const blog = await axios.get( `https://your-service-id.microcms.io/api/v1/blog//blog/${params.slug}`, { headers: { 'X-API-KEY': 'your-api-key' }, } ) return { blogItems: blog.data, } }, </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問