Node.js 速習: Express 4 で bodyParser を使わずにリクエストボディを解析
Node.js、Express、ミドルウェアにおける「bodyParser is deprecated express 4」エラー解説
Express 4.x 以降では、body-parser
ミドルウェアは非推奨となり、代わりに組み込みのミドルウェアを使用する必要があります。この変更により、コードの簡略化とセキュリティの向上などが実現されました。
エラーメッセージ
(node:12345) DeprecationWarning: body-parser deprecated undefined
原因
body-parser
ミドルウェアは、リクエストボディを解析して、req.body
オブジェクトに格納する役割を果たしていました。しかし、Express 4.x では、この機能が組み込みミドルウェアで提供されるようになったため、body-parser
は不要になりました。
解決策
body-parser
の代わりに、以下の組み込みミドルウェアを使用できます。
express.json()
: JSON リクエストボディを解析express.urlencoded()
: URL エンコードされたリクエストボディを解析
例
const express = require('express');
const app = express();
// body-parser の代わりに組み込みミドルウェアを使用
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.post('/api/users', (req, res) => {
// req.body には、リクエストボディの内容が格納される
console.log(req.body);
res.send('OK');
});
app.listen(3000);
補足
body-parser
は依然として動作しますが、将来的には削除される可能性があります。- 組み込みミドルウェアは、
body-parser
よりも高速で安全です。 body-parser
の代替ミドルウェアも存在します。
JSON リクエストボディを解析
const express = require('express');
const app = express();
// JSON リクエストボディを解析
app.use(express.json());
app.post('/api/users', (req, res) => {
// req.body には、リクエストボディの内容が格納される
console.log(req.body);
res.send('OK');
});
app.listen(3000);
URL エンコードされたリクエストボディを解析
const express = require('express');
const app = express();
// URL エンコードされたリクエストボディを解析
app.use(express.urlencoded({ extended: true }));
app.post('/api/users', (req, res) => {
// req.body には、リクエストボディの内容が格納される
console.log(req.body);
res.send('OK');
});
app.listen(3000);
複数のミドルウェアを使用
const express = require('express');
const app = express();
// JSON リクエストボディを解析
app.use(express.json());
// URL エンコードされたリクエストボディを解析
app.use(express.urlencoded({ extended: true }));
// 他のミドルウェア
app.post('/api/users', (req, res) => {
// req.body には、リクエストボディの内容が格納される
console.log(req.body);
res.send('OK');
});
app.listen(3000);
型定義
TypeScript を使用している場合は、@types/express
パッケージをインストールすることで、req.body
の型定義を利用できます。
import express from 'express';
const app = express();
app.use(express.json());
app.post('/api/users', (req: express.Request, res: express.Response) => {
// req.body は、`User` 型になる
const user: User = req.body;
// ...
});
interface User {
name: string;
email: string;
}
エラー処理
リクエストボディの解析に失敗した場合、エラーが発生します。エラーハンドリングミドルウェアを使用して、エラーを適切に処理する必要があります。
app.use((err, req, res, next) => {
// エラー処理
res.status(500).send('エラーが発生しました');
});
body-parser の代替ミドルウェア
express-json-parser
- 軽量で高速
body-parser-urlencoded
body-parser
のurlencoded()
オプションと互換性がある
multer
- ファイルアップロード処理に特化
- 画像、動画、音声など、さまざまな種類のファイルをアップロード可能
koa-bodyparser
- Koa フレームワーク向け
- JSON、URL エンコード、multipart/form-data など、さまざまな種類のリクエストボディを解析
- Fastify フレームワーク向け
- 使用するフレームワーク
- 解析したいリクエストボディの種類
などを考慮して、適切なミドルウェアを選択する必要があります。
node.js express middleware