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
请从下方官方网站安装适合你操作系统的 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, { Request, Response, NextFunction } from 'express'
import { bindingCargo, getCargo, Body, Equal, CargoValidationError } from 'express-cargo'
const app = express()
const port = process.env.PORT || 3000
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
class ExampleRequest {
@Body() // 从请求 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)
})
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
if (err instanceof CargoValidationError) {
res.status(400).json({
errors: err.errors.map(error => error.message),
})
return
}
next(err)
})
app.listen(port, () => {console.log(`Example app listening on port ${port}`)})
7. 运行
npm run dev
测试请求:
POST http://localhost:3000/example
Content-Type: application/json
{
"id": "1"
}
响应:
{ "id": "1" }
- ❌
"id": "2"→ 会发生验证错误