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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

2回答

1172閲覧

axiosを用いたAPI通信について

coppepan

総合スコア14

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2018/04/18 14:35

現在サーバー側はnodeでフロントエンドはreactでアプリケーションを開発しています。
ログイン機能を作っているのですが、api通信がうまくいかないです。

フロント側

js

1 import axios from "axios"; 2 3 export const startLogin = (user) => async dispatch => { 4 const res = await axios.post("/api/users/login", user); 5 dispatch({ type: "LOGIN", payload: res.data }); 6}

サーバー側

js

1app.post("/api/users/login", async (req, res) => { 2 var body = _.pick(req.body, ["email", "password"]); 3 try { 4 var user = await User.findByCredential(body.email, body.password); 5 if (user) { 6 var token = await user.generateAuthToken(); 7 res.header("x-auth", token).send(user); 8 } else { 9 console.log("no user"); 10 } 11 } catch (e) { 12 res.status(400).send(); 13 } 14 });

サーバー側でuserの取得は確認済みです。
にも関わらず、 axios の返り値が返ってこない。。 エラーもありません。
正直私の周りの人たちもこれには、お手上げ状態でどうしようもない状態です。
何か些細なことでもいいので、ご教授いただけないでしょうか?
よろしくお願いいたします ????‍♂️

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

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

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

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

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

HayatoKamono

2018/04/18 14:40

「サーバー側でuserの取得は確認済みです。」というのは、質問文に記載されているフロント側のコードによってリクエストをサーバー側で受け取り、「var user = await User.findByCredential(body.email, body.password);」のところでuserをDBから取れているという意味でしょうか?
coppepan

2018/04/19 00:41

ご回答ありがとうございます????‍♂️ その通りでございます。
guest

回答2

0

ベストアンサー

1

axiosって、クライアント側のaxios.post("/api/users/login", user)の部分ですが、baseURLの設定無しに/api/usersのように相対パスで指定ってできましたっけ?

const api = axios.create({ baseURL: 'https://xyz.aiueo.com' }); api.post("/api/users/login", user);

こんな感じでbaseURLの設定が必要なのではなかったでしたか?

2

上記を試してダメな場合、https://jsonplaceholder.typicode.com//postsPOSTでリクエストを質問文に記載のクライアント側のコードで投げたらどういう結果になるでしょうか?

リクエストの投げ方はこの辺を参考にして頂くとして。
https://github.com/typicode/jsonplaceholder#how-to

3

res.header("x-auth", token); // ここまでは通っているのか再確認! res.send(user);

既に確認済みなのでしょうが、質問文に記載がないので念のため。

4

axiosのbaseURLを質問文に掲載のコード外のところで設定しているならば、そのURLを再確認。
特に環境変数でbaseURLを動的に設定しているのであれば、そこを含めて再確認。

5

curlコマンドでpostした場合はどうなるでしょうか?

とりあえず考えられるところ、確認してみるところとしては、以上でしょうか。

投稿2018/04/18 14:45

編集2018/04/18 16:33
HayatoKamono

総合スコア2415

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

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

coppepan

2018/04/19 01:12

とても丁寧なご回答ありがとうございます????‍♂️ 1 package.jsonでproxy設定しています。 "proxy": { "/api/*": { "target": "http://localhost:5000" } } 2 試してみましたが応答がないようです。 3 通っています。 4 間違いはなさそうです。 5 しっかりレスポンス返ってきますね。 postmanを使っていますがしっかり返ってきてます。 2が少し気になりました。 なぜなのか。。 お忙しい中、本当にありがとうございました。 とても助かります ????‍♂️
HayatoKamono

2018/04/19 01:14

2もcurlなりpostman経由で試してみて下さい。そこでレスポンスかえってくれば、2のサイトは大丈夫ってことになり、質問者さんのフロントのコードに何か問題ありと、切り分け出来ると思います。
HayatoKamono

2018/04/19 01:16

あとは、http://localhost:5000をaxios.postのurl部分にハードコーディングで加えて試したらどうなるかも確認なさってみてください。
HayatoKamono

2018/04/19 01:46

エラーも応答もないというのが気になりますが、一応変なキャッシュが悪さしてないか確認した方が良いかもしれませんね。service workerのキャッシュも含め。
coppepan

2018/04/19 05:35

ご指摘いただいた通り試しましたが、ダメでした。 もしかしたらですが、 私は今 ログインフォームを ```js render() { return ( <form onSubmit={this.onSubmit}> <input type="text" placeholder="Email" autoFocus value={this.state.email} onChange={this.onEmailChange} className="text-input" /> <input type="text" placeholder="Password" value={this.state.password} onChange={this.onPasswordChange} className="text-input" /> <div> <button className="button">Login</button> </div> </form> ``` で書いています。 submitするとページがリロードされてしまいます。 全然関係ないかもしれませんが、formを使ったこの書き方に問題がある可能性はございますか? ????‍♂️
HayatoKamono

2018/04/19 05:55

その場合、`event.preventDefault();`みたいにリロードしないようにしとかないとダメですね。たぶん、それが原因だと思います。
HayatoKamono

2018/04/19 06:01

`<form onSubmit={this.onSubmit}>`を`<form onSubmit={(event) => this.onSubmit(event)}>`に変えて、onSubmitメソッド内で`event.preventDefault()`を呼べば、大丈夫かとおもいます。
coppepan

2018/04/19 13:29

event.preventDefault()を呼んでいないせいでした。。 本当にありがとうございます!! 私の下手な質問で混乱させてしまい申し訳ありませんでした ????‍♂️
HayatoKamono

2018/04/19 21:08

無事解決して良かったですね!
guest

0

axiosですが、以外に対応ブラウザが限られています。
未サポートブラウザの場合はaxiosが使えないのでその場合はpolyfill.jsを使用すると解決できます。

投稿2018/04/18 15:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

coppepan

2018/04/19 00:43

ご回答ありがとうございます ????‍♂️ chome を使っていて、前回作成したアプリケーションでは、axiosで開発していれ問題ありませんでした。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問