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

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

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

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

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

Q&A

解決済

1回答

2459閲覧

NuxtでProxyが上手く動作しません。

Taka2401

総合スコア8

Nuxt.js

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

proxy

proxy(プロキシー)は、企業などの内部コンピュータとインターネットの中間に位置し、例えば直接インターネットに接続できない内部コンピュータの代理としてインターネットに接続する等をするシステム、もしくは代理として機能を実行するソフトウェアです。内部ネットワークへのアクセスを一元管理し、内部からの特定の種類の接続以外を遮断すること、外部からの不正アクセスを拒否することなどに用いられます。

0グッド

1クリップ

投稿2021/07/25 13:57

編集2021/07/25 14:03

前提・実現したいこと

Nuxtで、usersのnewページから名前を投稿し、リダイレクトされ_id.vueページで送信した名前を表示しようとしています。RailsをAPIに使用しProxyで呼び出す設定をしています。

発生している問題・エラーメッセージ

投稿フォームから送信するとリダイレクトはされて、ページは表示されますが名前が表示されません。
consoleにはエラーはなく、URLにはhttp://localhost:8000/users/undefinedと、
Networkにはhttp://localhost:8000/users/undefinedと出て、APIのlocalhost:3000が読み込まれていないところまで確認できました。ちなみにデータの送信自体はconsoleログで確認できました。

該当のソースコード

// nuxt.config.js modules: [ '@nuxtjs/axios', ], axios: { proxy: true }, proxy: { '/api/': { target: 'http://localhost:3000', pathRewrite: { '^/api/': '' } }
// front/plugins/axios.js export default function({ $axios, redirect }) { $axios.setToken('access_token') $axios.onResponse(config => { $axios.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000') }) }
// front/pages/users/_id.vue <template> <h1>Hello, {{ name }}</h1> </template> <script> export default { asyncData({ $axios, params }) { return $axios.get(`/api/users/${params.id}`) .then((res) => { return { name: res.data.name } }) } } </script>
// front/pages/users/new.vue <template> <section> <div> <h1>New user</h1> <form @submit.prevent="post"> <label for="name">Name: </label> <input id="name" v-model="name" type="text" name="name" /> <button type="submit">submit</button> </form> </div> </section> </template> <script> export default { data() { return { name: '' } }, methods: { post() { this.$axios.post('/api/users', { name: this.name }) .then((res) => { this.$router.push(`${res.data.id}`) }) } } } </script>

試したこと

_id.vueページの
return $axios.get(/api/users/${params.id})を return $axios.get(/localhost:3000/users/${params.id})に直すと名前は表示されたので、nuxt.config.jsに原因があると仮説を立てています。

一番状況が似ているhttps://teratail.com/questions/334172を参考に、
pathRewriteで'^/api/': '/' から'^/api/': ''に変更しましたが状況は変わりませんでした。
どなたかご教授いただけますでしょうか。

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

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

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

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

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

guest

回答1

0

自己解決

_id.vueページの
return $axios.get(/api/users/${params.id})をreturn $axios.get(users/${params.id})に変更すると、リダイレクトされ投稿した名前を表示することができました。
nuxt.config.jsの

axios: { proxy: true }, proxy: { '/api/': { target: 'http://localhost:3000', pathRewrite: { '^/api/': '' } }

をコメントアウトしても処理ができていたことから、proxyが動作せずに実行できてしまったようです。。
しかし、なぜそうなるのか理論の裏付けができていないので根本的な解決に至らず、今後の課題にしていきたいます。

投稿2021/07/26 05:54

編集2021/07/26 05:55
Taka2401

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問