getting-started
🚀 express-cargo をはじめよう
このドキュメントは、TypeScript + Express 環境で express-cargo を素早く体験するための最小構成ガイドです。 例は pnpm + Node.js 18 以降をベースにしています。
1. 要件
- Node.js 18 以降(LTS 推奨)
パッケージマネージャ: npm | yarn | pnpm → このドキュメントでは pnpm を使用します。
express-cargo は Decorator + Metadata を使用するため、TypeScript を推奨します。
2. Node.js のインストール
以下の公式サイトからお使いの OS に適した LTS バージョンをインストールしてください。
- Node.js 公式ダウンロード https://nodejs.org
インストールの確認:
node -v
pnpm -v
成功すると、バージョンが表示されます。
3. 新しいプロジェクトの作成(pnpm)
pnpm
mkdir express-cargo-example
cd express-cargo-example
pnpm init
4. TypeScript 環境の設定
4-1. TypeScript と開発依存関係のインストール
pnpm add -D typescript ts-node @types/node
4-2. tsconfig.json の作成
pnpm tsc --init
4-3. 推奨 tsconfig 設定
{
"compilerOptions": {
...,
"experimentalDecorators": true, // express-cargo 必須
"emitDecoratorMetadata": true, // 型メタデータを使用
...
},
...
}
⚠️ experimentalDecorators、emitDecoratorMetadata がないと、 express-cargo のバリデーション/トランスフォーメーションが動作しません。
5. express & express-cargo のインストール
pnpm add express express-cargo
pnpm add -D @types/express
pnpm add reflect-metadata
6. 基本サーバー + express-cargo 設定
6-1. src/app.ts
import express from 'express'
import { bindingCargo, getCargo, Body, Query, Header, Params, Min, Max, Equal, NotEqual, Prefix, Suffix } from 'express-cargo'
import errorHandlerRouter from './errorHandler'
const app = express()
const port = process.env.PORT || 3000
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.use(errorHandlerRouter)
app.listen(port, () => {console.log(`Example app listening on port ${port}`)})
class ExampleRequest {
@Body() // リクエストボディからフィールドを抽出
@Equal('1') // 値が "1" でない場合、バリデーションエラーが発生
id!: string
}
app.post('/example', bindingCargo(ExampleRequest), (req, res) => { // bindingCargo(Class): Request → DTO 変換 + バリデーション
const cargo = getCargo<ExampleRequest>(req) // バリデーション済みの型安全なオブジェクトを返す
res.json(cargo)
})
7. 実行
npm run dev
テストリクエスト:
POST http://localhost:3000/example
Content-Type: application/json
{
"id": "1"
}
レスポンス:
{ "id": "1" }
- ❌
"id": "2"→ バリデーションエラーが発生