ExpressでJSONデータ処理
Express アプリケーションで JSON POST データを消費する方法
日本語解説
-
ミドルウェア body-parser をインストール
npm install body-parser
const express = require('express'); const bodyParser = require('body-parser');
const app = express(); app.use(bodyParser.json());
3. **POST ルートを定義:**
```javascript
app.post('/your-endpoint', (req, res) => {
const data = req.body; // JSON データが `req.body` に格納されます
// JSON データを処理します
console.log(data);
res.json({ message: 'Data received successfully' });
});
解説
- POST ルートのハンドラー内で、
req.body
を使用して JSON データを処理できます。 req.body
オブジェクトに JSON データが格納されます。body-parser.json()
ミドルウェアは、リクエストボディを JSON オブジェクトに変換します。
例
app.post('/users', (req, res) => {
const newUser = req.body;
// 新しいユーザーをデータベースに保存する処理
console.log('New user:', newUser);
res.json({ message: 'User created successfully' });
});
この例では、POST リクエストで送信された JSON データを受け取り、新しいユーザーを作成する処理を行っています。
注意
- エラー処理やバリデーションを追加して、安全なアプリケーションを作成してください。
- JSON データの構造は、クライアント側で送信するデータと一致している必要があります。
ExpressでJSONデータ処理の例
例1: 基本的なJSONデータ受け取り
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.post('/users', (req, res) => {
const newUser = req. body;
console.log('New user:', newUser);
res.json({ message: 'User created successfully' });
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
- 受け取ったJSONデータを処理し、レスポンスとしてJSONを返します。
- POSTリクエストのハンドラーで、
req.body
にJSONデータが格納されます。
例2: バリデーションとエラー処理
const express = require('express');
const bodyParser = require('body-parser');
const Joi = require('joi');
const app = express();
app.use(bodyParser. json());
const userSchema = Joi.object({
name: Joi.string().required(),
email: Joi.string().email().required()
});
app.post('/users', (req, res) => {
const { error, value } = userSchema.validate(req.body);
if (error) {
return res.status(400).json({ error: error.details[0].message });
}
const n ewUser = value;
// 新しいユーザーをデータベースに保存する処理
console.log('New user:', newUser);
res.json({ message: 'User created successfully' });
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
- バリデーションが成功した場合、受け取ったJSONデータを処理します。
- バリデーションエラーが発生した場合、エラーメッセージをレスポンスとして返します。
Joi
ライブラリーを使って、JSONデータのバリデーションを行います。
例3: 中間層(ミドルウェア)の使用
const express = require('express');
const bodyParser = require('body-parser');
const userMiddleware = require('./userMiddleware'); // カスタムミドルウェア
const app = express();
app.use(bodyParser.json());
app.use('/users', userMiddleware);
app.post('/users', (req, res) => {
const newUser = req.body;
// 新しいユーザーをデータベースに保存する処理
console.log('New user:', newUser);
res.json({ message: 'User created successfully' });
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
- ミドルウェア内で、リクエストデータの処理やバリデーションを行うことができます。
- ミドルウェアは特定のルートやパスに適用されます。
組み込みのexpress.json()
Express v4.3以降では、組み込みのexpress.json()
ミドルウェアが提供されています。これはbody-parser
と同様の機能を提供します。
const express = require('express');
const app = express();
app.use(express.json());
// POSTルートの処理
サードパーティのミドルウェア
他にも多くのサードパーティのミドルウェアが利用できます。例えば:
- multer
マルチパートフォームデータを処理するミドルウェア。 - qs
クエリ文字列をパースするミドルウェア。
手動解析
場合によっては、手動でリクエストボディを解析する必要があるかもしれません。ただし、これは一般的には推奨されません。
app.post('/users', (req, res) => {
let data = '';
req.on('data', chunk => {
data += chunk;
});
req.on('end', () => {
try {
const parsedData = JSON.parse(data);
// 処理
} catch (err) {
// エラー処理
}
});
});
選択基準
- パフォーマンス
ほとんどの場合、パフォーマンスの差は無視できるほどです。 - 機能
特殊な機能が必要な場合は、サードパーティのミドルウェアを検討します。 - シンプルさ
組み込みのexpress.json()
が最もシンプルです。
json node.js express