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

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

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

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

Express

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

Q&A

解決済

2回答

287閲覧

Node.js で express を用いたpost受け取りがうまくいかない

mukudori

総合スコア11

Node.js

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

Express

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

0グッド

0クリップ

投稿2019/03/01 21:20

ログイン画面を設計中なのですが、
ログインボタンを押すとundefinedが出力されてしまいます。
何が間違っているのでしょうか?

main.js

1const express = require('express'); 2const app = express(); 3var explorers = require('bitcore-explorers'); 4var bodyParser = require('body-parser'); 5//ログイン 6app.post('/loginwave', (req,res) => { 7 8 console.log(res.body); 9 10}); 11 12 13 14 15// サーバー起動 16app.use(express.static(__dirname + '/public')); 17app.use(express.static('/public')); 18app.use(express.static(__dirname + '/assets')); 19app.use(express.static('/assets')); 20app.use(bodyParser.urlencoded({extended: true})); 21 22 23app.options('*', (req, res) => { 24 res.sendStatus(200); 25}); 26 27 28 29 30app.listen(process.env.PORT || 8000); 31console.log("The server has been started."); 32

index.html

1//一部抜粋 2 3<main> 4 <div class="form-group col-sm-6 col-sm-offset-3 "> 5 <input class="form-control btn-round" type="text" name="add" placeholder="Wallet_Address"/> 6 </div> 7<br><br> 8 <div class="font-alt mt-30"><a class="btn btn-border-w btn-lg btn-g btn-round " id="loginwave"> ログイン</a></div> 9</main> 10 </div> 11 </div> 12 </div> 13 14 </section> 15 16 17 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 18 <script> 19 $(document).ready(function() { 20 $('#loginwave').click(function() { 21 $.ajax({ 22 type: 'POST', 23 url: 'http://localhost:8000/loginwave/', 24 dataType: 'json', 25data: { 26Address: $('input[name="add"]').val() 27} 28 }).done(function(res) { 29 30 }).fail(function(res) { 31 32 }); 33 }); 34 }); 35 </script> 36 37 38 39 40 41

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

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

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

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

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

guest

回答2

0

ベストアンサー

ちょっと見なので、正しい指摘かどうかわかりませんが、、、

データ投入側

データ投入側(ajax側)が

data: {Address: $('input[name="add"]').val()}

となっていますが、 JSON.stringify で文字列化して、かつ contentType を指定しないと
正しくJSONでポストされない可能性がありそうです。

data: JSON.stringify({Address: $('input[name="add"]').val()}), contentType: 'application/JSON',

データ受け側

データ受け側(express)ですが、

app.use(bodyParser.urlencoded({extended: true}));

だけだと、いわゆる一般的なformデータの受け取りしかできませんので、

app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json());

のように、jsonもパースする必要がありそうです。

ご参考になれば。

投稿2019/03/01 22:01

ItoTomonori

総合スコア1283

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

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

mukudori

2019/03/02 06:09

早々のご回答ありがとうございます。 教えて頂いたとおりにソースコードに記述を行ったのですが htmlファイル側でContentTypeの記述を行うと クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、http://localhost:8000/loginwave/ にあるリモートリソースの読み込みは拒否されます (理由: CORS 要求が成功しなかった)。 というerrorが発生してしまいます。 ContentTypeの記述を行わなければ 動くのですがやはり出力がundefinedになってしまいます・・。 どうしたら良いのでしょうか・・
mukudori

2019/03/02 06:17

念のため app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin","*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Access-Control-Request-Method', '*'); res.header('Access-Control-Allow-Methods', 'OPTIONS, GET'); res.header('Access-Control-Allow-Headers', '*'); next(); }); これを別途追加で記述を行いCORSの許可を促しましたが 特に効果なしでした
guest

0

app.useおよび
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());

の位置的な問題と推測
app.postより上に記述を変えたところ
正常に稼働した

投稿2019/03/02 07:41

mukudori

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問