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

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

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

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

Express

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

Q&A

解決済

1回答

2771閲覧

node.js + EXPRESSでPOSTのreq.bodyを受け取りたい

chess

総合スコア12

Node.js

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

Express

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

0グッド

1クリップ

投稿2018/01/15 02:09

web関連の初心者です。
実験的に簡単なWebAPIを作成したく、node.js + EXPRESSでサーバを記述し、クライアントからcurlで叩いて確認をしようとしています。

curl

1curl -X POST -H 'Content-Type:text/json' -d "{ \"Val\": \"1\" }" http://URL:3000/api/v1/post/001

に対してサーバで{"Val","1"}を受け取ろうとしています。
サーバ側は、npm install express-generator -gで生成したものに対し、myapp/routes/index.jsを以下のように変更しました。

javascript

1var express = require('express'); 2var router = express.Router(); 3 4// TESTデータ 5var testList = [{node: "001", data: "0"},{node: "002", data: "0"}] 6router.post( '/api/v1/post/:node', function( req, res, next ) { 7 var testdata; 8 for ( lp1 = 0; lp1 < testList.length; lp1++ ) { 9 if ( testList[lp1].node == req.params.node ) { 10 testdata = testList[lp1]; 11 break; 12 } 13 } 14 res.json( testdata ); 15 console.log( req.body ); 16}); 17module.exports = router;

サーバのconsole.logで表示される期待値は、curl -dで指定した'{"Val":"1"}'なのですが、"{}"のような空のjsonが表示されます。expressのPOSTでreq.bodyを受け取るためにはどのようにすれば良いのでしょうか。各サイトを漁ってツギハギしてみたりEXPRESSのドキュメントを理解できていないのでトンチンカンな事をしているのだと思いますが、ぜひヒントをいただければ助かります。

以下の環境で実装しています。

  • サーバ:Amazon Linux AMI 2017.09.1
  • node.js:v9.4.0
  • express:4.15.5

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

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

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

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

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

guest

回答1

0

ベストアンサー

contentTypeって「application/json」ではなくて?「text/json」て大丈夫でしたっけ?
req.bodyで取れるはずなのですが。

投稿2018/01/15 02:48

sousuke

総合スコア3828

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

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

chess

2018/01/15 03:20

早速の回答ありがとうございます。 curlで記述したcontentTypeが"text/json"になっていたのが原因でした。"application/json"に修正したらreq.bodyで所望のデータが取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問