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

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

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

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

2644閲覧

Axiosを用いたNuxt.jsからExpressへのPostにおいて値がうまく渡せないです

eiradino2

総合スコア6

Nuxt.js

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

0クリップ

投稿2021/06/26 16:04

やろうとしていること

フロントエンドにNuxt.js、バックエンドにExpress(Node.js)を用いたWebアプリを開発中です。Nuxt.jsのページからAxiosを使ってExpressにデータを送信したいのですが、うまくいかないです。

コード

フォーム(index.vue)

vue

1<template> 2 <div class="hello"> 3 <form action> 4 <input type="text" placeholder="text" v-model="text" /> 5 <input type="submit" value="decide" @click="submitClick" /> 6 </form> 7 </div> 8</template>

script(index.vue)

vue

1<script> 2export default { 3 data() { 4 return { 5 text: null, 6 }; 7 }, 8 methods: { 9 submitClick: async function () { 10 await this.$axios.$post("/api", { foo: this.text }); 11 // alert(this.text); 12 }, 13 }, 14}; 15</script>

Express側の処理

js

1const express = require('express') 2const app = express() 3const db = require('../models/index') 4app.get('/', (req, res) => { 5 // 省略 6}) 7app.post('/', (req, res) => { 8 db.sequelize.sync().then(() => db.Reflection.create({ 9 sentence: req.body.foo 10 })) 11}) 12module.exports = { 13 path: '/api', 14 handler: app 15} 16

現在できていること

  • $axios.$postメソッドは反応しています。db.reflection.create()のsentenceを適当な文字列にすれば、フォームを送信した時点で、データがちゃんと作成されます。
  • ただ、値の受け渡しが上手く行っていない状態で以下のようなエラーが出ます。
ERROR Cannot read property 'foo' of undefined at api\index.js:11:24

何度調べても分からないので、どなたか分かる方がいれば教えていただけると幸いです。

参考ページ

@nuxt/axiosでCRUDする時のアクセス方法とデータの受け取り方【Nuxt + Express】
Nuxt.jsでaxiosの使い方と設定方法を紹介
【Nuxt.js】非同期するなら、$axiosでしょ

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。
Axios (ブラウザ側) でのPOSTはできていると思うので、Express側で POSTメソッドで渡ってきたBodyを処理できてないからかな?と思います。
json

試していないので、申し訳ないのですが、もし Express 4.x なら、以下を添えると処理できるかもしれません。Axiosでの POST は Content-Type: application/json で送信されていると思うので、以下のような感じでどうでしょうか?

const express = require('express') const app = express() // ここを追加 app.use(express.json())

参考

Express 4.x API リファレンス
https://expressjs.com/ja/api.html

req.body

Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as express.json() or express.urlencoded().
The following example shows how to use body-parsing middleware to populate req.body.

あるいは、Express のバージョン次第かと思うのですが、よくあるのが body-parser を使う方法です。

投稿2021/06/27 01:36

suama

総合スコア1997

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

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

eiradino2

2021/06/27 02:54

うわああああああああ出来ました!! 昨日ずっと悩んでたので本当にありがたいです!! 教えていただいたリファレンスのページも熟読しておきます!ゞ
suama

2021/06/27 03:58

よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問