การตั้งค่าและรันโปรเจกต์ LoopBack ด้วย ServBay
LoopBack คืออะไร?
LoopBack คือเฟรมเวิร์ก Node.js แบบโอเพนซอร์สที่สามารถขยายได้อย่างสูง พัฒนาโดย IBM ออกแบบมาเพื่อช่วยให้นักพัฒนาสร้าง API และบริการไมโครเซอร์วิสได้อย่างรวดเร็ว โดยใช้แนวคิด Model-Driven Development (MDD) ซึ่งช่วยให้นักพัฒนานิยามโมเดลข้อมูลและสร้าง RESTful API ที่ทรงพลังโดยอัตโนมัติ LoopBack มีฟีเจอร์ครบครัน เช่น การเชื่อมต่อแหล่งข้อมูล การยืนยันตัวตนและการอนุญาต การสำรวจ API และรองรับฐานข้อมูลและโปรโตคอลหลากหลายชนิด
จุดเด่นและข้อดีหลักของ LoopBack
- การพัฒนาขับเคลื่อนโดยโมเดล (MDD): ให้นักพัฒนานิยามโมเดลข้อมูลได้อย่างเป็นธรรมชาติ เฟรมเวิร์กจะสร้างจุดเข้าสู่ API และตรรกะการตรวจสอบข้อมูลให้อัตโนมัติ
- รองรับแหล่งข้อมูลหลากหลาย: เชื่อมต่อฐานข้อมูลชั้นนำได้ง่าย (เช่น MongoDB, MySQL, PostgreSQL, MariaDB ฯลฯ) รวมถึง RESTful service และ SOAP service อื่น ๆ
- เครื่องมือ CLI อันทรงพลัง: LoopBack CLI มีคำสั่งหลากหลายที่ช่วยให้การตั้งค่าโปรเจกต์ การนิยามโมเดล และการตั้งค่าข้อมูลต้นทางเป็นเรื่องง่ายขึ้นมาก
- โครงสร้างที่ยืดหยุ่นและขยายได้: รองรับการเชื่อมต่อไลบรารีหรือบริการของบุคคลที่สาม เพื่อตอบสนองทุกความต้องการทางธุรกิจ
- ระบบความปลอดภัยในตัว: มีระบบ Authentication (ยืนยันตัวตน) และ Authorization (สิทธิ์การเข้าถึง) ที่ตั้งค่าพร้อมใช้งาน เพื่อให้งานของนักพัฒนารวดเร็วและปลอดภัย
การใช้ LoopBack ช่วยเพิ่มประสิทธิภาพในการสร้าง backend เว็บแอปฯ และ API สร้างซอฟต์แวร์ที่มีประสิทธิภาพและดูแลง่าย
การตั้งค่าและรันโปรเจกต์ LoopBack ด้วย ServBay
คู่มือนี้จะแนะนำวิธีสร้างและรันโปรเจกต์ LoopBack ด้วย Node.js ที่จัดการโดย ServBay เราจะใช้ฟีเจอร์ “เว็บไซต์” ของ ServBay เพื่อเซ็ตเซิร์ฟเวอร์เว็บในเครื่อง และใช้ Reverse Proxy เพื่อตั้งค่าการส่งต่อคำขอไปยังพอร์ตที่แอป LoopBack ของคุณทำงานอยู่ เหมาะสำหรับการพัฒนาและการดีบักแบบ Local access
การสร้างโปรเจกต์ LoopBack
ติดตั้ง LoopBack CLI
ก่อนเริ่ม ให้แน่ใจว่าคุณได้ติดตั้งและเปิดใช้งานแพ็กเกจ Node.js บน ServBay แล้ว จากนั้นเปิดเทอร์มินอลและติดตั้ง LoopBack CLI แบบ global ด้วย npm:
bashnpm install -g @loopback/cli
1เริ่มต้นโปรเจกต์ใหม่
เปลี่ยนไปยังไดเรกทอรีรากเว็บไซต์ที่ ServBay แนะนำ
/Applications/ServBay/www
แล้วใช้ LoopBack CLI เพื่อสร้างแอปใหม่ แนะนำให้ตั้งชื่อโปรเจกต์ด้วยอักษรพิมพ์เล็กและขีดกลาง เช่นservbay-loopback-app
:bashcd /Applications/ServBay/www lb4 app servbay-loopback-app
1
2CLI จะนำทางคุณในการตั้งค่าโปรเจกต์ เลือกฟีเจอร์ต่าง ๆ (เช่น REST API, การแปลงข้อมูล, ระบบยืนยันตัวตน ฯลฯ) และโครงสร้างโค้ด เลือกตามที่ต้องการ
ติดตั้ง Dependencies ของโปรเจกต์
เข้าไปยังโฟลเดอร์โปรเจกต์ที่สร้างใหม่ แล้วติดตั้ง Dependencies ที่จำเป็นด้วยคำสั่ง:
bashcd servbay-loopback-app npm install
1
2
ปรับแต่ง Output ของโปรเจกต์ LoopBack (ตัวเลือกเพิ่มเติม)
เพื่อทดสอบการเข้าถึงแอปฯ ผ่าน ServBay เราจะปรับ endpoint /ping
ให้แสดงข้อความตอบกลับเฉพาะตัว
แก้ไขไฟล์
src/controllers/ping.controller.ts
เปิดไฟล์
src/controllers/ping.controller.ts
ของโปรเจกต์ แล้วแก้ไขให้ endpoint/ping
ส่งคืนสตริง "Hello ServBay!":typescriptimport {get} from '@loopback/rest'; export class PingController { constructor() {} @get('/ping') ping(): string { // เปลี่ยนข้อความตอบกลับเป็น "Hello ServBay!" return 'Hello ServBay!'; } }
1
2
3
4
5
6
7
8
9
10
11
รันโปรเจกต์ในโหมดพัฒนา
ระหว่างพัฒนา นักพัฒนามักจะรัน LoopBack แบบ development server เพื่อการ iterate และ debug ที่รวดเร็ว เราจะใช้ฟีเจอร์ Reverse Proxy ของ ServBay เข้าถึง development server นี้
รัน development server
เปิดเทอร์มินอลที่รากโปรเจกต์ แล้วสั่งสตาร์ท LoopBack โดยปกติแอปจะ listen บนพอร์ตที่ระบุได้ผ่าน environment variable เช่น
8585
:bashcd /Applications/ServBay/www/servbay-loopback-app PORT=8585 npm start
1
2เมื่อแอปฯ เริ่มทำงานแล้ว ในเทอร์มินอลจะมีข้อความลักษณะ "Server is running at http://[::1]:8585" แสดงขึ้น
ตั้งค่าเว็บไซต์ (Reverse Proxy) บน ServBay
เปิดแผงควบคุม ServBay ไปที่หมวด ‘เว็บไซต์’ คลิกปุ่มเพิ่ม แล้วสร้าง Reverse Proxy ใหม่ ตั้งค่าการส่งต่อโดเมนและพอร์ตจากภายนอก (browser) ไปยังพอร์ตของแอป LoopBack ในเครื่อง:
- ชื่อ (Name): เช่น
My first LoopBack dev site
(ชื่อแสดงใน ServBay) - โดเมน (Domain): เช่น
servbay-loopback-dev.servbay.demo
(ใช้เข้าผ่าน browser) - ประเภทเว็บไซต์ (Type): เลือก
Reverse Proxy
- IP Address: ใส่
127.0.0.1
(แอปฯ ทำงานในเครื่อง) - พอร์ต (Port): ใส่
8585
(ตรงกับที่แอปฟังคำสั่ง)
ตั้งค่าเสร็จแล้ว บันทึกและ apply เพื่อให้ ServBay ปรับ DNS ในเครื่อง (ทั้งแก้ไฟล์
/etc/hosts
หรือใช้ ServBay Helper Tool) และแก้ไขการตั้งค่า Web Server (Caddy หรือ Nginx) อัตโนมัติสามารถอ่านวิธีเพิ่ม Reverse Proxy ใน ServBay ได้ที่: เพิ่มเว็บไซต์ Node.js สำหรับนักพัฒนา
- ชื่อ (Name): เช่น
เข้าถึงแอปในโหมดพัฒนา
เปิดเว็บเบราว์เซอร์ แล้วเข้าที่ domain และ path ของ LoopBack เช่น
https://servbay-loopback-dev.servbay.demo/ping
โดยปกติ ServBay จะติดตั้ง SSL Certificate ให้กับ domain ในเครื่อง (ผ่าน ServBay User CA หรือ ServBay Public CA) ทันที คุณจึงเข้าผ่าน HTTPS ได้อย่างปลอดภัย ช่วยเลียนแบบสภาพแวดล้อม production ล่วงหน้าและตรวจเช็คปัญหา SSL ได้ตั้งแต่ยังพัฒนา ดูรายละเอียดฟีเจอร์ SSL ได้ที่: ใช้งาน SSL ปกป้องเว็บไซต์
การดีพลอยโหมด Production (ตัวเลือกเพิ่มเติม)
เมื่อพร้อมดีพลอยระบบจริง อาจต้องรัน LoopBack ในโหมด production เพื่อประสิทธิภาพที่สูงขึ้น และลดการแสดงผล debug
รัน production server
ณ โฟลเดอร์รากโปรเจกต์ เปิดเทอร์มินอลแล้วสั่งรันโหมด production โดยตั้ง
PORT
(เช่น8586
) และ environment variableNODE_ENV=production
:bashcd /Applications/ServBay/www/servbay-loopback-app PORT=8586 NODE_ENV=production npm start
1
2ตั้งค่าเว็บไซต์ (Reverse Proxy) บน ServBay
กลับไปที่แผงควบคุม ‘เว็บไซต์’ ของ ServBay แล้วเพิ่มหรือแก้ไข Reverse Proxy ที่ชี้ไปยังพอร์ต production ของแอป LoopBack:
- ชื่อ (Name): เช่น
My first LoopBack production site
- โดเมน (Domain): เช่น
servbay-loopback-prod.servbay.demo
- ประเภทเว็บไซต์ (Type): เลือก
Reverse Proxy
- IP Address: ใส่
127.0.0.1
- พอร์ต (Port): ใส่
8586
(production server)
บันทึกและ apply การตั้งค่า
- ชื่อ (Name): เช่น
เข้าถึงแอปโหมด Production
เปิดเบราว์เซอร์แล้วเข้าที่โดเมน เช่น
https://servbay-loopback-prod.servbay.demo/ping
เพื่อตรวจสอบระบบ ดีพลอยจริง ServBay จะเซ็ต HTTPS ให้โดยอัตโนมัติเช่นกัน
การเชื่อมต่อฐานข้อมูล
LoopBack รองรับการเชื่อมต่อฐานข้อมูลหลายประเภทผ่าน Data Source Connector ขณะที่ ServBay มีแพ็กเกจ MySQL, MariaDB, PostgreSQL, MongoDB และ Redis ให้นักพัฒนาสามารถเปิดใช้งานและเชื่อมต่อได้ง่ายในเครื่อง
ตัวอย่างการตั้งค่าต่อไปนี้แสดงวิธีเชื่อมต่อฐานข้อมูลยอดนิยมผ่าน ServBay สามารถปรับแต่งได้ตามเงื่อนไขจริงของคุณ
ข้อควรระวัง: ตัวอย่าง username/password ในโค้ดเป็น placeholder ในการใช้งานจริง กรุณาใช้ข้อมูลที่ตั้งไว้กับ ServBay ตรวจสอบในแผงควบคุมเพื่อดูหรือเปลี่ยนรหัสผู้ใช้ฐานข้อมูล
เชื่อมต่อกับ MongoDB
ตรวจสอบว่าได้ติดตั้งและเปิดใช้งาน MongoDB ใน ServBay แล้ว ติดตั้ง MongoDB connector ให้กับ LoopBack:
bashnpm install --save @loopback/connector-mongodb
1จากนั้นตั้งค่าข้อมูลในไฟล์ของโปรเจกต์ ตามตัวอย่าง (ปกติอยู่ที่
src/datasources/mongodb.datasource.ts
):typescript// src/datasources/mongodb.datasource.ts import {juggler} from '@loopback/repository'; const config = { name: 'mongodb', connector: 'mongodb', // ServBay MongoDB ทำงานที่ localhost:27017 url: 'mongodb://localhost:27017/servbay-loopback-app', // เปลี่ยนชื่อฐานข้อมูลตามของคุณ host: 'localhost', port: 27017, user: '', // ระบุชื่อผู้ใช้หากมี authentication password: '', // ระบุรหัสผ่านหากมี authentication database: 'servbay-loopback-app', // ปรับตามชื่อฐานข้อมูล // ตัวเลือกอื่น ๆ... }; export class MongodbDataSource extends juggler.DataSource { static dataSourceName = 'mongodb'; constructor() { super(config); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22เชื่อมต่อกับ Redis
ตรวจสอบว่าได้ติดตั้งและเปิดใช้งาน Redis Package ใน ServBay แล้ว ติดตั้ง Connector สำหรับ Redis (ปัจจุบัน LoopBack 4 ไม่มี
@loopback/connector-redis
อย่างเป็นทางการ ส่วนใหญ่จะใช้loopback-connector-redis
ของชุมชน หรือใช้ไลบรารีredis
กับ service ของ LoopBack):bashnpm install --save loopback-connector-redis # หรือ Redis library ที่รองรับ
1ตัวอย่างตั้งค่า datasource (แบบใช้
loopback-connector-redis
):typescript// src/datasources/redis.datasource.ts import {juggler} from '@loopback/repository'; const config = { name: 'redis', connector: 'redis', // ServBay Redis ทำงานที่ localhost:6379 url: 'redis://localhost:6379', // ตัวเลือกอื่น ๆ... }; export class RedisDataSource extends juggler.DataSource { static dataSourceName = 'redis'; constructor() { super(config); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17หมายเหตุ: การใช้งาน DataSource ใน LoopBack 4 จะแตกต่างจาก LoopBack 3 เล็กน้อย ตัวอย่างข้างต้นเป็น style ของ LoopBack 3 แต่พารามิเตอร์เช่น
host
,port
,user
,password
,database
ยังคงใช้หลักการเดียวกัน
แนะนำให้อ่านคู่มือ LoopBack 4 เรื่อง DataSource configuration เพื่อแนวทางล่าสุดเชื่อมต่อ MariaDB (หรือ MySQL)
ตรวจสอบว่าติดตั้งและเปิดใช้งาน MariaDB หรือ MySQL Package ใน ServBay แล้ว (ทั้งสองกรณีใช้ Connector MySQL ร่วมกันได้) ติดตั้ง Connector สำหรับ MySQL:
bashnpm install --save @loopback/connector-mysql
1จากนั้นตั้งค่า datasource:
typescript// src/datasources/mariadb.datasource.ts หรือ mysql.datasource.ts import {juggler} from '@loopback/repository'; const config = { name: 'mariadb', // หรือ 'mysql' connector: 'mysql', // ใช้ mysql connector // url: '', // จะสร้างแบบ url หรือแยก host, port, database ก็ได้ host: 'localhost', // ServBay database ทำงานที่ localhost port: 3306, // MariaDB/MySQL port ทั่วไป user: 'root', // ผู้ใช้เริ่มต้น คือ root password: 'password', // << เปลี่ยนเป็นรหัสจริงที่ตั้งกับ ServBay >> database: 'servbay_loopback_app', // ตั้งชื่อฐานข้อมูลให้ตรง // ตัวเลือกอื่น ๆ... }; export class MariaDbDataSource extends juggler.DataSource { static dataSourceName = 'mariadb'; // หรือ 'mysql' constructor() { super(config); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21โปรดสังเกตว่า
password: 'password'
ในตัวอย่างเป็น placeholder กรุณาตั้งค่ารหัสผ่านจริงในแผงควบคุม ServBay แล้วใส่ลงในการตั้งค่านี้เชื่อมต่อ PostgreSQL
ตรวจสอบว่าติดตั้งและเปิดใช้งาน PostgreSQL ใน ServBay แล้ว ติดตั้ง Connector สำหรับ PostgreSQL:
bashnpm install --save @loopback/connector-postgresql
1ตั้งค่า datasource:
typescript// src/datasources/postgresql.datasource.ts import {juggler} from '@loopback/repository'; const config = { name: 'postgresql', connector: 'postgresql', // url: '', // สร้างด้วย url หรือกำหนด host, port, database แยกก็ได้ host: 'localhost', // ServBay PostgreSQL อยู่ที่ localhost port: 5432, // PostgreSQL port ทั่วไป user: 'user', // << เปลี่ยนเป็นชื่อผู้ใช้จริงที่ตั้งใน ServBay >> password: 'password', // << ใส่รหัสผ่านจริงที่กำหนดใน ServBay >> database: 'servbay_loopback_app', // ชื่อฐานข้อมูล // ตัวเลือกอื่น ๆ... }; export class PostgresqlDataSource extends juggler.DataSource { static dataSourceName = 'postgresql'; constructor() { super(config); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21โปรดจำว่า
user: 'user'
และpassword: 'password'
เป็น placeholder ต้องเข้าไปตั้งหรือตรวจสอบในแผงควบคุม ServBay
สรุป
หากคุณทตามขั้นตอนข้างต้น จะสามารถสร้าง ตั้งค่า และรันโปรเจกต์ LoopBack บนสภาพแวดล้อมท้องถิ่นด้วย ServBay ได้อย่างครบวงจร คุณเรียนรู้การใช้ฟีเจอร์เว็บไซต์ (Reverse Proxy) เข้าถึงแอปฯ แบบ local รวมทั้งการเชื่อมต่อฐานข้อมูลหลากหลายที่จัดเตรียมโดย ServBay
ServBay เป็นสภาพแวดล้อมพัฒนา Node.js เฟรมเวิร์ก เช่น LoopBack ที่มีเสถียรภาพ ใช้งานง่าย รวม Web Server, ฐานข้อมูล และ runtime ของภาษาต่าง ๆ ไว้อย่างสมบูรณ์ ช่วยให้นักพัฒนาจัดการงานเว็บ local ได้สะดวก ปลอดภัยและทดสอบได้สมจริง สัมผัสประสิทธิภาพการจัดการเว็บไซต์ การรองรับ SSL และการเชื่อมต่อฐานข้อมูลด้วย ServBay ทำให้การพัฒนาและทดสอบในเครื่องของคุณง่ายขึ้นกว่าที่เคย