NESTJS ต่อ MSSQL ยังไง มาดูกัน

NestJS เป็น BackEnd Node.js ที่เขียนด้วย TypeScript ถ้าเพื่อนๆยังไม่รู้จักแนะนำให้ไปดูบทความนี้ก่อนนะครับ

ในบทความนี้ผมจะมายกตัวอย่างการเชื่อมต่อกับ MSSQL ครับ โดยใช้ TypeORM เป็นตัวกลางที่จะทำให้ NestJS ติดต่อกับ MSSQL ครับ



ก่อนจะไปทำการต่อ NestJS กับ MSSQL เรามาทำความรู้จักกับ TypeORM กันก่อนครับ

TypeORM

TypeORM เป็น Object Relational Mapping (ORM) ซึ่งเป็นตัวอำนวยความสะดวกและลดความยุ่งยากในการเชื่อมต่อ Database ที่เราเลือก TypeORM เพราะรองรับ TypeScript ซึ่งเหมาะกับ NestJS

ตัวอย่างการใช้ TypeORM ครับ

ตัวอย่าง Entity
ตัวอย่างการเรียกใช้

ทำความรู้จัก TypeORM กันไปแล้ว ต่อไปมาลองใช้ TypeORM กับ NestJS และ MSSQL กันครับ

Install

เริ่มด้วย Install TypeORM กับ MSSQL Server Client สำหรับ Node.js ก่อนครับ

$ npm install --save @nestjs/typeorm typeorm mssql

หลังจากนั้นให้เราไปสร้างไฟล์ ormconfig.json ให้อยู่ใน Root Folder แบบนี้ครับ

ormconfig.json

ในไฟล์ ormconfig.json ก็จะเป็น Config ต่างๆเพื่อเชื่อมกับ SQL สังเกตุตรง "entities" สำคัญมากครับเพื่อบอกให้ TypeORM อ่านไฟล์ .entity ทุกไฟล์เมื่อเรา Run Server

AppModule

จากนั้นเราต้องไป Import TypeOrmModule.forRoot() เข้าไปในไฟล์ AppModule เสร็จแล้วจึงไปสร้าง Class Entity ดังนี้

Photo Entity

Class Entity นี้ ตัว TypeORM จะนำไปสร้าง Database ให้เรา หลักการสร้าง Class Entity ก็ง่ายนิดเดียวครับให้เราสร้างไฟล์ โดยตั้งชื่อไฟล์ตามด้วย .entity และตามด้วย .ts หรือ .js ครับ ตัวอย่าง แบบนี้ครับ photo.entity.ts

จากนั้น Import Entity, Column, PrimaryGeneratedColumn จาก TypeORM มาใช้แบบในโค้ดด้านบนครับ นำ @Entity() ไปวางไว้บน Class ครับเพื่อให้ TypeORM รู้ว่านี่คือ Class Entity

@PrimaryGeneratedColumn จะเป็นการสร้าง Column นั้นให้เป็น key

@Column จะเป็นการสร้าง Column ธรรมดา

หมายเหตุ อย่าลืมใส่ Typeให้กับตัวแปรทุกครั้งนะครับ

Photo Module

หลังจากที่เราสร้าง Entity เสร็จแล้วให้เรา Import Entity เข้ามาใน Module นั้นๆ จากตัวอย่างเราสร้าง Photo Entity เสร็จแล้วก็ Import Photo Entity เข้ามาใน Photo Moduleโดยใส่ใน @Module ด้วย TypeOrmModule.forFeature([Photo]) เป็นอันว่าเรียบร้อยแล้วครับ
จากนั้นนำ Module ที่เราสร้างไปใส่ใน AppModule ได้เลย

App Module

เป็นอันเสร็จครับลอง Run กันเลย $ npm run start

ตัวอย่างจาก Console
MS SQL

เราจะได้ Table ตามที่เราสร้าง Entity ไว้ครับ ง่ายมากครับ สะดวกในการติดตั้งไม่ต้องไปนั่งเพิ่ม Table เองทำครั้งเดียวก็พอครับ

Photo Service

มาถึงการใช้งานแล้วมาลองดูกันว่ามันจะง่ายหรือยากกันแน่ครับ ผมมาใช้งานกับไฟล์ Service เลยนะครับ ให้เรา Import InjectRepository , Repository , Photo มาไว้นะครับ ตามโค้ดด้านบน@InjectRepository(Photo) จะเป็นการบอกให้ Inject ตัว Photo Repository เข้ามาตามที่เราได้ประกาศไว้ใน PhotoModule ครับ

หลังจากสร้าง Class Entity และ Import เข้ามาใน Module เรียบร้อยแล้ว ต่อไปเรามาดูเรื่อง CRUD Operation กันครับ

Read

เริ่มด้วยการเลือกข้อมูล หรือ Read เราจะใช้คำสั่ง find() แบบนี้ครับ

Photo Service

มาดูที่ Function แรกกันครับเราจะเรียก this.photoRepository.find() จะเป็นการเรียก Table photo ทั้งหมดออกมา ถ้าเป็น SQL ก็จะเป็น Selete * FROM photo

Photo Service

แต่ถ้าเราใส่ id เข้าไปจะเป็นการเลือกแค่ id นั้นๆออกมา

ตัวอย่างใน PostMan

Create

การ Create หรือสร้างข้อมูลลงใน Database เราจะใช้คำสั่ง save() สมมุติว่าเรามี Function insertPhoto โดยเป็น Function ที่รับข้อมูลเข้ามาเพื่อบันทึกข้อมูลลงใน Database Function insertPhoto จะมีหน้าตาประมาณนี้ครับ

Photo Service

จากโค้ดด้านบนจะเห็นว่าเราจะ new Photo(); ขึ้นมาก่อนครับแล้วนำ data ที่เรารับมา ใส่ค่าให้กับ photo ของเราตามโค้ดด้านบนครับ จากนั้นเมื่อครบแล้วให้ใช้คำสั่ง this.photoRepository.save(photo); จะเป็นการนำ photo ของเราไป save ลง Database ครับ จะเห็นว่าเราไม่ต้องใส่ id เข้าไปเอง ตัว TypeORM จะเป็นตัวจัดการให้เราเองครับ

ตัวอย่างใน PostMan
ตัวอย่างใน PostMan

Update

ต่อไปมาดู Update กันบ้างนะครับก็จะคล้ายๆกันกับ Create ครับ แต่ก่อนจะ Update เราต้องไปเลือกมาก่อนว่าเราจะ Update ตัวไหน ตามตัวอย่างด้านล่างนี้ครับ

Photo Service

จากโค้ดด้านบนจะเห็นว่าเราใช้คำสั่ง this.photoRepository.findOne(data.id) มาก่อนครับเพื่อเลือกว่าจะ Update ตัวไหน ก็นำตัวนั้นมาใส่ค่าให้อีกครั้งครับเสร็จแล้วก็นำไป save() ตามโค้ดด้านบนครับ

Delete

และสุดท้ายครับการ Delete หรือลบข้อมูล เราจะใช้คำสั่ง remove() ตามตัวอย่างด้านล่างนี้ครับ

Photo Service

วิธีการง่ายๆ เราแค่ก็ส่ง id ของข้อมูลที่ต้องการ Remove เข้าไปเพื่อ Remove มันครับ

แค่นี้เราก็สามารถติดต่อกับ SQL ได้แบบง่ายๆแล้วครับ นอกจากวิธีด้านบนแล้วผมยังมีอีกหนึ่งตัวอย่างให้ดูครับเผื่อใครไม่ถนัดแบบนี้ แต่ถนัดเป็น SQL มากกว่า โดยเราสามารถใส่ Custom Query ได้แบบนี้ครับ

Photo Service

วิธีการใช้ก็แค่นำ String ที่เป็น SQL แล้วสั่งให้ this.photoRepository.query(sql); แบบนี้เลยก็ได้ครับ


สรุป

NestJS สามารถติดต่อกับ SQL ได้ โดยผ่าน TypeORM ซึ่งมี Class ให้เราใช้ได้มากมาย ในบทความนี้ผมยกตัวอย่างการใช้ NestJS กับ MSSQL แต่นอกจาก MSSQL ยังสามารถทำได้อีกหลาย Database นะครับ ไม่ว่าจะเป็น MySQL หรือ MariaDB หรือ Postgres เป็นต้น

ก็จบไปแล้วนะครับสำหรับบทความนี้ ขอบคุณเพื่อนๆที่เข้ามาอ่านบทความนะครับ เพื่อนคนไหนมีข้อติชมหรืออยากแสดงความคิดเห็นสามารถ Comment ไว้ได้นะครับ

สามารถโหลด Code ตัวอย่างได้ตามลิ้งค์ด้านล่างนี้เลยครับ