Node.jsのExpress
で立てたサーバでjsonのリクエストを受け取る方法についてです。
環境構築と簡単な動作確認については公式か 【Nodejs】さくっとjsonを返すローカルサーバを立てる をご参照ください。
環境
モジュール
- Express 4.17
- body-parcer 1.19
開発環境
- Node.js 10.15
- npm 6.4
- yarn 1.15
- Windows 10 Home (Mac, Linux可)
body-parcer
Express単体でリクエストボディを取得しようとするとundefined
となります。
app.post("/user", (req, res, next) => {
// bodyを表示
condole.log(req.body) // undefined
});
そのため、ボディを変換するミドルウェアのbody-parcerを使って変換が必要です。 インストールと利用方法は以下です。
# インストール
$ npm install body-parser
# or
$ yarn add body-parser
const express = require('express')
var bodyParser = require('body-parser');
const app = express()
// リクエストボディをjsonに変換する
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
これでreq.body
でリクエストボディのJSONを取り扱えます。
コード例
例としてユーザを作成するエンドポイントを考えます。 ユーザ情報のjsonをPOSTで受け取ります。
const express = require('express')
var bodyParser = require('body-parser');
const app = express()
const port = 3000
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.post("/user", (req, res, next) => {
// アクセスログ
console.log(req.method, req.url, req.ip)
// headerを表示
console.log(req.headers)
// bodyを表示
console.log(req.body)
// 登録処理など...
res.send('OK')
});
// ポート3000でサーバ起動
app.listen(port, () => console.log(`click http://localhost:${port}/ !`))
これに{ name: 'Alice', age: 20 }
をリクエストすると以下のコンソールログです。JSONのキーもreq.body.name
、req.body.age
と簡単に得られます。
>node file_list.js
click http://localhost:3000/ !
POST /user ::ffff:127.0.0.1
{ host: 'localhost:3000',
'content-type': 'application/json',
'content-length': '37' }
{ name: 'Alice', age: 20 }
参考
参考と言いつつコアな部分はこの記事と同じになってます。すみません。
【Electron】PCのスリープと起動イベントを検知する
ElectronNodejsJavaScriptTypeScriptschedule2021-09-06
axiosでリクエスト中の処理をキャンセルする
JavaScriptNodejsschedule2021-08-31
Node.jsでChrome.exeを起動してページを開く方法
NodejsJavaScriptWindowsschedule2021-08-25