CRUD
CRUD
This chapter applies only to TypeScript
CRUD ν¨ν€μ§ (@nestjsx/crud
)λ₯Ό μ¬μ©νλ©΄ CRUD 컨νΈλ‘€λ¬ λ° μλΉμ€λ₯Ό μ½κ² λ§λ€ μ μμΌλ©° RESTful APIλ₯Ό μν λ€μν κΈ°λ₯μ μ¦μ μ¬μ©ν μ μμ΅λλ€.
λ°μ΄ν°λ² μ΄μ€μ κ΄κ³μμ΄ νμ₯ κ°λ₯ν CRUD 컨νΈλ‘€λ¬
νν°λ§, νμ΄μ§ 맀κΉ, μ λ ¬, κ΄κ³, μ€μ²© κ΄κ³, μΊμ λ±μ μ¬μ©νμ¬ μΏΌλ¦¬ λ¬Έμμ΄ κ΅¬λ¬Έ λΆμ
νλ‘ νΈ μλ μ¬μ©μ μν 쿼리 λΉλκ° μλ νλ μ μν¬μ ꡬμ λ°μ§ μλ ν¨ν€μ§
쿼리, κ²½λ‘ λ§€κ° λ³μ λ° DTO μ ν¨μ± κ²μ¬
컨νΈλ‘€λ¬ λ©μλλ₯Ό μ½κ² μ¬μ μ
μμ§λ§ κ°λ ₯ν κ΅¬μ± (κΈλ‘λ² κ΅¬μ± ν¬ν¨)
μΆκ° ν¬νΌ λ°μ½λ μ΄ν°
Swagger λ€νλ¨ΌνΈ
warning μλ¦Ό μ§κΈκΉμ§
@nestjsx/crud
λTypeORM
λ§ μ§μνμ§λ§Sequelize
λ°Mongoose
μ κ°μ λ€λ₯Έ ORMλ κ°κΉμ΄ μμΌ λ΄μ ν¬ν¨λ μμ μ λλ€. λ°λΌμ μ΄ κΈ°μ¬μμλTypeORM
μ μ¬μ©νμ¬ CRUD 컨νΈλ‘€λ¬ λ° μλΉμ€λ₯Ό μμ±νλ λ°©λ²μ λν΄ μ€λͺ ν©λλ€.@nestjs/typeorm
ν¨ν€μ§λ₯Ό μ΄λ―Έ μ±κ³΅μ μΌλ‘ μ€μΉνκ³ μ€μ νλ€κ³ κ°μ ν©λλ€. μμΈν λ΄μ©μ μ¬κΈ°λ₯Ό μ°Έμ‘°νμμμ€.
Getting started
CRUD κΈ°λ₯ μμ±μ μμνλ €λ©΄ νμν λͺ¨λ μ’ μμ±μ μ€μΉν΄μΌ ν©λλ€.
νλ‘μ νΈμ μ΄λ―Έ μΌλΆ μν°ν°κ° μλ€κ³ κ°μ ν©λλ€.
μ°λ¦¬κ° ν΄μΌ ν 첫λ²μ§Έ λ¨κ³λ serviceλ₯Ό λ§λλ κ²μ λλ€.
μλΉμ€κ° μλ£λμμΌλ―λ‘ μ»¨νΈλ‘€λ¬λ₯Ό λ§λ€μ΄ λ΄ μλ€ :
λ§μ§λ§μΌλ‘ λͺ¨λμ λͺ¨λ κ²μ μ°κ²°ν΄μΌν©λλ€.
warning μλ¦Ό
HeroesModule
μ 루νΈApplicationModule
λ‘ κ°μ Έ μ€λ κ²μ μμ§ λ§μμμ€.
μ΄νμ Nest μ ν리μΌμ΄μ μλ λ€μκ³Ό κ°μ΄ μλ‘ μμ±λ μλ ν¬μΈνΈκ° μμ΅λλ€.
GET /heroes
- get many heroes.GET /heroes/:id
- get one hero.POST /heroes/bulk
- create many heroes.POST /heroes
- create one hero.PATCH /heroes/:id
- update one hero.PUT /heroes/:id
- replace one hero.DELETE /heroes/:id
- delete one hero.
Filtering and pagination
CRUD provides rich tools for filtering and pagination. Example request:
info Request GET /heroes?select=name&filter=power||gt||90&sort=name,ASC&page=1&limit=3
μ΄ μμμλ νμ΄λ‘ λͺ©λ‘μ μμ²νκ³ νμ΄λ‘μ νμ
κ° 90λ³΄λ€ ν° name
μμ±λ§ μ ννκ³ 1 νμ΄μ§ λ΄μμ κ²°κ³Ό μ νμ 3μΌλ‘ μ€μ νμ΅λλ€. ASC
μμλ‘ name
μΌλ‘ μ λ ¬λ©λλ€.
μλ΅ κ°μ²΄λ λ€μκ³Ό λΉμ·ν©λλ€.
warning μλ¦Ό κΈ°λ³Έ μ΄μ μμ² μ¬λΆμ κ΄κ³μμ΄ λ¦¬μμ€ μλ΅ κ°μ²΄μ μ μ§λ©λλ€. μ°λ¦¬μ κ²½μ°μλ
id
μ΄μ λλ€.
쿼리 λ§€κ° λ³μ λ° νν° μ°μ°μμ μ 체 λͺ©λ‘μ νλ‘μ νΈμ Wikiμμ μ°Ύμ μ μμ΅λλ€.
Relations
μΈκΈν κ°μΉκ° μλ λ λ€λ₯Έ κΈ°λ₯μ "κ΄κ³"μ λλ€. CRUD μ μ΄κΈ°μμ API νΈμΆ λ΄μμ νμΉν μ μλ μν°ν° κ΄κ³ λͺ©λ‘μ μ§μ ν μ μμ΅λλ€.
@Crud()
λ°μ½λ μ΄ν° μ΅μ
μμ νμ©λ κ΄κ³λ₯Ό μ§μ ν ν λ€μκ³Ό κ°μ μμ²μ ν μ μμ΅λλ€.
info Request GET /heroes/25?join=profile||address,bio
μλ΅μλ address
λ° bio
μ΄μ΄ μ νλκ³ κ²°ν©λ νλ‘νμΌμ κ°μ§ hero κ°μ²΄κ° ν¬ν¨λ©λλ€.
λν μλ΅μλ eager: true
λ‘ μ€μ λμ΄ μμΌλ―λ‘ λͺ¨λ μλ΅μμ μ§μλλ―λ‘ name
μ΄μ΄ μ νλ faction
μ€λΈμ νΈκ° ν¬ν¨λ©λλ€.
νλ‘μ νΈμ WiKiμμ κ΄κ³μ λν μμΈν μ 보λ₯Ό μ°Ύμ μ μμ΅λλ€.
Path params validation
κΈ°λ³Έμ μΌλ‘ CRUDλ μ΄λ¦μ΄ id
μΈ μ¬λ¬κ·Έλ₯Ό μμ±νκ³ number
λ‘ μ ν¨μ±μ κ²μ¬ν©λλ€.
κ·Έλ¬λ μ΄ λμμ λ³κ²½ν κ°λ₯μ±μ΄ μμ΅λλ€. μν°ν°μ κΈ°λ³Έ μ΄ _id
(UUID λ¬Έμμ΄)κ° μκ³ μ΄λ₯Ό μλ ν¬μΈνΈμ μ¬λ¬κ·Έλ‘ μ¬μ©ν΄μΌ νλ€κ³ κ°μ νμμμ€. μ΄ μ΅μ
μ μ¬μ©νλ©΄ λ€μκ³Ό κ°μ μμ
μ μ½κ² μνν μ μμ΅λλ€.
λ λ§μ params μ΅μ μ νλ‘μ νΈμ Wikiλ₯Ό μ°Έμ‘°νμμμ€.
Request body validation
μμ² λ³Έλ¬Έ μ ν¨μ± κ²μ¬λ κ° POST, PUT, PATCH μμ²μ Nest ValidationPipe
λ₯Ό μ μ©νμ¬ κΈ°λ³Έμ μΌλ‘ μνλ©λλ€. μ°λ¦¬λ @Crud()
λ°μ½λ μ΄ν° μ΅μ
μ model.type
μ μ ν¨μ± κ²μ¬ κ·μΉμ μ€λͺ
νλ DTOλ‘ μ¬μ©ν©λλ€.
μ΄λ₯Ό μ λλ‘ μννκΈ° μν΄ validation groupsλ₯Ό μ¬μ©ν©λλ€.
warning μλ¦Ό
create
λ°update
μ‘°μΉμ λν΄ λ³λμ DTO ν΄λμ€λ₯Ό μμ ν μ§μνλ κ²μ λ€μ CRUD 릴리μ€μ μ£Όμ μ°μ μμ μ€ νλμ λλ€.
Routes options
@Crud()
λ°μ½λ μ΄ν°λ₯Ό μ μ©νμ¬ μμ±λλ νΉμ κ²½λ‘λ§ λΉνμ±ννκ±°λ νμ±ν ν μ μμ΅λλ€.
λν λ©μλ λ°μ½λ μ΄ν°λ₯Ό νΉμ κ²½λ‘ decorators
λ°°μ΄μ μ λ¬νμ¬ λͺ¨λ λ©μλ λ°μ½λ μ΄ν°λ₯Ό μ μ©ν μ μμ΅λλ€. κΈ°λ³Έ λ©μλλ₯Ό μ¬ μ μνμ§ μκ³ μΌλΆ λ°μ½λ μ΄ν°λ₯Ό μΆκ°ν λ νΈλ¦¬ν©λλ€.
Documentation
μ΄ μ±ν°μ μλ CRUD κΈ°λ₯ μ€ μΌλΆλ§ λ€λ£Ήλλ€. νλ‘μ νΈμ Wiki νμ΄μ§μμ λ λ§μ μ¬μ© μ§λ¬Έμ λν λ΅λ³μ μ°Ύμ μ μμ΅λλ€.
Last updated
Was this helpful?