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 ครับ
ทำความรู้จัก 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
ก็จะเป็น Config ต่างๆเพื่อเชื่อมกับ SQL สังเกตุตรง "entities"
สำคัญมากครับเพื่อบอกให้ TypeORM อ่านไฟล์ .entity
ทุกไฟล์เมื่อเรา Run Server
จากนั้นเราต้องไป Import TypeOrmModule.forRoot()
เข้าไปในไฟล์ AppModule
เสร็จแล้วจึงไปสร้าง Class 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ให้กับตัวแปรทุกครั้งนะครับ
หลังจากที่เราสร้าง Entity เสร็จแล้วให้เรา Import Entity เข้ามาใน Module นั้นๆ จากตัวอย่างเราสร้าง Photo Entity เสร็จแล้วก็ Import Photo Entity เข้ามาใน Photo Moduleโดยใส่ใน @Module
ด้วย TypeOrmModule.forFeature([Photo])
เป็นอันว่าเรียบร้อยแล้วครับ
จากนั้นนำ Module ที่เราสร้างไปใส่ใน AppModule ได้เลย
เป็นอันเสร็จครับลอง Run กันเลย $ npm run start
เราจะได้ Table ตามที่เราสร้าง Entity ไว้ครับ ง่ายมากครับ สะดวกในการติดตั้งไม่ต้องไปนั่งเพิ่ม Table เองทำครั้งเดียวก็พอครับ
มาถึงการใช้งานแล้วมาลองดูกันว่ามันจะง่ายหรือยากกันแน่ครับ ผมมาใช้งานกับไฟล์ Service เลยนะครับ ให้เรา Import InjectRepository , Repository , Photo
มาไว้นะครับ ตามโค้ดด้านบน@InjectRepository(Photo)
จะเป็นการบอกให้ Inject ตัว Photo Repository เข้ามาตามที่เราได้ประกาศไว้ใน PhotoModule ครับ
หลังจากสร้าง Class Entity และ Import เข้ามาใน Module เรียบร้อยแล้ว ต่อไปเรามาดูเรื่อง CRUD Operation กันครับ
Read
เริ่มด้วยการเลือกข้อมูล หรือ Read เราจะใช้คำสั่ง find()
แบบนี้ครับ
มาดูที่ Function แรกกันครับเราจะเรียก this.photoRepository.find()
จะเป็นการเรียก Table photo ทั้งหมดออกมา ถ้าเป็น SQL ก็จะเป็น Selete * FROM photo
แต่ถ้าเราใส่ id เข้าไปจะเป็นการเลือกแค่ id นั้นๆออกมา
Create
การ Create หรือสร้างข้อมูลลงใน Database เราจะใช้คำสั่ง save()
สมมุติว่าเรามี Function insertPhoto โดยเป็น Function ที่รับข้อมูลเข้ามาเพื่อบันทึกข้อมูลลงใน Database Function insertPhoto จะมีหน้าตาประมาณนี้ครับ
จากโค้ดด้านบนจะเห็นว่าเราจะ new Photo();
ขึ้นมาก่อนครับแล้วนำ data ที่เรารับมา ใส่ค่าให้กับ photo ของเราตามโค้ดด้านบนครับ จากนั้นเมื่อครบแล้วให้ใช้คำสั่ง this.photoRepository.save(photo);
จะเป็นการนำ photo ของเราไป save ลง Database ครับ จะเห็นว่าเราไม่ต้องใส่ id เข้าไปเอง ตัว TypeORM จะเป็นตัวจัดการให้เราเองครับ
Update
ต่อไปมาดู Update กันบ้างนะครับก็จะคล้ายๆกันกับ Create ครับ แต่ก่อนจะ Update เราต้องไปเลือกมาก่อนว่าเราจะ Update ตัวไหน ตามตัวอย่างด้านล่างนี้ครับ
จากโค้ดด้านบนจะเห็นว่าเราใช้คำสั่ง this.photoRepository.findOne(data.id)
มาก่อนครับเพื่อเลือกว่าจะ Update ตัวไหน ก็นำตัวนั้นมาใส่ค่าให้อีกครั้งครับเสร็จแล้วก็นำไป save()
ตามโค้ดด้านบนครับ
Delete
และสุดท้ายครับการ Delete หรือลบข้อมูล เราจะใช้คำสั่ง remove()
ตามตัวอย่างด้านล่างนี้ครับ
วิธีการง่ายๆ เราแค่ก็ส่ง id ของข้อมูลที่ต้องการ Remove เข้าไปเพื่อ Remove มันครับ
แค่นี้เราก็สามารถติดต่อกับ SQL ได้แบบง่ายๆแล้วครับ นอกจากวิธีด้านบนแล้วผมยังมีอีกหนึ่งตัวอย่างให้ดูครับเผื่อใครไม่ถนัดแบบนี้ แต่ถนัดเป็น SQL มากกว่า โดยเราสามารถใส่ Custom Query ได้แบบนี้ครับ
วิธีการใช้ก็แค่นำ String ที่เป็น SQL แล้วสั่งให้ this.photoRepository.query(sql);
แบบนี้เลยก็ได้ครับ
สรุป
NestJS สามารถติดต่อกับ SQL ได้ โดยผ่าน TypeORM ซึ่งมี Class ให้เราใช้ได้มากมาย ในบทความนี้ผมยกตัวอย่างการใช้ NestJS กับ MSSQL แต่นอกจาก MSSQL ยังสามารถทำได้อีกหลาย Database นะครับ ไม่ว่าจะเป็น MySQL หรือ MariaDB หรือ Postgres เป็นต้น
ก็จบไปแล้วนะครับสำหรับบทความนี้ ขอบคุณเพื่อนๆที่เข้ามาอ่านบทความนะครับ เพื่อนคนไหนมีข้อติชมหรืออยากแสดงความคิดเห็นสามารถ Comment ไว้ได้นะครับ
สามารถโหลด Code ตัวอย่างได้ตามลิ้งค์ด้านล่างนี้เลยครับ