# NestJS คืออะไร? คู่มือสร้าง Backend API ด้วย NestJS สำหรับนักพัฒนา SME ไทย 2026
เมื่อโปรเจกต์ Node.js เริ่มใหญ่ขึ้น ปัญหาที่นักพัฒนาพบบ่อยคือ โค้ดขาดโครงสร้างที่ชัดเจน ยากต่อการ Maintain และขยายทีม Express.js ให้อิสระสูงแต่ไม่มี Convention กำหนดทิศทาง NestJS เกิดมาเพื่อแก้ปัญหานี้ โดยนำแนวคิดสถาปัตยกรรมแบบ Angular มาใช้ฝั่ง Backend พร้อม TypeScript First Class Support
NestJS ไม่ได้แค่เป็น Framework ธรรมดา แต่เป็น Application Architecture Framework ที่กำหนด Pattern การเขียนโค้ดให้ชัดเจน ทำให้ทีมขนาดใดก็สามารถทำงานร่วมกันได้อย่างมีประสิทธิภาพ ตั้งแต่ SME เล็กๆ ไปจนถึงองค์กรระดับ Enterprise
บทความนี้จะพาคุณเรียนรู้ NestJS ตั้งแต่พื้นฐาน สถาปัตยกรรม วิธีสร้าง REST API พร้อม Middleware, Guards, Pipes และการ Deploy สำหรับโปรเจกต์จริง
NestJS คืออะไร?
NestJS คือ Node.js Framework สำหรับสร้าง Server-side Applications ที่มีประสิทธิภาพ เขียนด้วย TypeScript และรองรับ JavaScript ด้วย NestJS ใช้ Express.js เป็น HTTP Server ภายใต้ (สามารถเปลี่ยนเป็น Fastify ได้) และนำแนวคิด OOP (Object-Oriented Programming), FP (Functional Programming) และ FRP (Functional Reactive Programming) มาผสมผสานกัน
จุดเด่นของ NestJS:
สถาปัตยกรรมหลักของ NestJS
Module
Module คือหน่วยการจัดกลุ่มโค้ดที่มีความเกี่ยวข้องกัน ทุก NestJS Application มีอย่างน้อย 1 Module (AppModule)
```typescript
@Module({
imports: [UsersModule, ProductsModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
```
Controller
Controller รับ HTTP Request และส่ง Response กลับ ใช้ Decorator กำหนด Route
```typescript
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll() {
return this.usersService.findAll();
}
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(+id);
}
@Post()
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
}
```
Service (Provider)
Service เป็นที่เก็บ Business Logic ทั้งหมด Controller เรียกใช้ Service ผ่าน Dependency Injection
```typescript
@Injectable()
export class UsersService {
private users = [];
findAll() {
return this.users;
}
findOne(id: number) {
return this.users.find(u => u.id === id);
}
create(createUserDto: CreateUserDto) {
const user = { id: Date.now(), ...createUserDto };
this.users.push(user);
return user;
}
}
```
วิธีเริ่มต้นโปรเจกต์ NestJS
ขั้นตอนที่ 1: ติดตั้ง NestJS CLI
```bash
npm install -g @nestjs/cli
nest new my-project
cd my-project
npm run start:dev
```
ขั้นตอนที่ 2: Generate Resource ใหม่
NestJS CLI ช่วย Generate Controller, Service, Module, DTO และ Entity พร้อมกันในคำสั่งเดียว:
```bash
nest generate resource users
# หรือ
nest g res products
```
คำสั่งนี้จะสร้างไฟล์ครบทั้ง CRUD ให้อัตโนมัติ
ขั้นตอนที่ 3: ใช้ Pipes สำหรับ Validation
```typescript
// main.ts
app.useGlobalPipes(new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true,
}));
```
```typescript
// create-user.dto.ts
import { IsEmail, IsString, MinLength } from 'class-validator';
export class CreateUserDto {
@IsString()
name: string;
@IsEmail()
email: string;
@IsString()
@MinLength(8)
password: string;
}
```
ขั้นตอนที่ 4: Guards สำหรับ Authentication
```typescript
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {}
// ใช้งานบน Controller
@UseGuards(JwtAuthGuard)
@Get('profile')
getProfile(@Request() req) {
return req.user;
}
```
เปรียบเทียบ NestJS กับ Framework อื่น
| ด้าน | Express.js | NestJS | Fastify |
|------|-----------|--------|---------|
| TypeScript Support | ต้องตั้งค่าเอง | Built-in, First class | ต้องตั้งค่าเอง |
| โครงสร้างโค้ด | ไม่บังคับ Pattern | Opinionated, Angular-style | ไม่บังคับ Pattern |
| Dependency Injection | ไม่มี | มี (built-in) | ไม่มี |
| Performance | ปานกลาง | ดี (ใช้ Express/Fastify) | เร็วมาก |
| Learning Curve | ต่ำ | ปานกลาง-สูง | ต่ำ |
| Enterprise Ready | ต้อง Setup เอง | ✓ พร้อมใช้ | ต้อง Setup เอง |
| Community | ใหญ่มาก | กำลังเติบโต | เล็ก-ปานกลาง |
| Microservices | ต้อง Setup เอง | Built-in Support | ต้อง Setup เอง |
ฟีเจอร์ขั้นสูงที่ใช้บ่อย
Interceptors
ใช้สำหรับ Transform Response, Logging หรือ Caching
```typescript
@Injectable()
export class TransformInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle().pipe(
map(data => ({ success: true, data, timestamp: new Date().toISOString() }))
);
}
}
```
Exception Filters
จัดการ Error อย่างสม่ำเสมอทั้ง Application
```typescript
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const status = exception.getStatus();
response.status(status).json({
success: false,
statusCode: status,
message: exception.message,
});
}
}
```
Microservices
NestJS รองรับ Microservices ด้วย Transport Layers หลายแบบ: TCP, Redis, RabbitMQ, Kafka
```typescript
// main.ts - Microservice mode
const app = await NestFactory.createMicroservice<MicroserviceOptions>(AppModule, {
transport: Transport.TCP,
options: { port: 3001 },
});
```
NestJS กับ Database: ใช้คู่กับอะไรได้บ้าง?
| Database | ORM/ODM | Package |
|----------|---------|---------|
| PostgreSQL | TypeORM | `@nestjs/typeorm` |
| PostgreSQL | Prisma | `@prisma/client` |
| MySQL | TypeORM | `@nestjs/typeorm` |
| MongoDB | Mongoose | `@nestjs/mongoose` |
| Redis | ioredis | `@nestjs/cache-manager` |
NestJS ทำงานได้ดีกับ Prisma ORM (ที่ทีม ADS FIT แนะนำ) และ TypeORM สำหรับ PostgreSQL
สรุปและก้าวต่อไป
NestJS คือตัวเลือกที่ยอดเยี่ยมสำหรับนักพัฒนาที่ต้องการสร้าง Backend API ที่แข็งแกร่ง Maintainable และ Scale ได้ โดยเฉพาะสำหรับโปรเจกต์ที่มีทีมหลายคนหรือวางแผนจะขยายในอนาคต
ข้อดีหลักที่ทำให้ NestJS คุ้มค่าเรียนรู้:
ก้าวต่อไปหลังจากอ่านบทความนี้:
1. ติดตั้ง NestJS CLI และสร้างโปรเจกต์แรก
2. ทดลอง Generate CRUD Resource ด้วย `nest g res`
3. เชื่อมต่อ Database ด้วย Prisma หรือ TypeORM
4. เรียนรู้ Authentication ด้วย JWT และ Passport.js
5. Deploy ขึ้น Production ด้วย Docker + PM2
ต้องการทีมพัฒนา Backend ด้วย NestJS สำหรับโปรเจกต์ของคุณ? ADS FIT มีทีม Developer ที่เชี่ยวชาญ NestJS, Next.js และ Laravel พร้อมช่วยสร้างระบบที่ตอบโจทย์ธุรกิจ [ติดต่อเราได้เลย](/contact) หรืออ่านบทความ Dev เพิ่มเติมที่ [Blog ของเรา](/blog)
