สร้างและรันโปรเจกต์ Koa.js ด้วย ServBay
ServBay คือสภาพแวดล้อมการพัฒนาเว็บบน macOS และ Windows ที่รวมซอฟต์แวร์สำคัญมากมายสำหรับนักพัฒนา เช่น runtime ของ Node.js และฐานข้อมูลหลากหลายแบบ บทความนี้จะสอนคุณใช้ ServBay เพื่อสร้าง รัน และจัดการโปรเจกต์ Koa.js ได้อย่างรวดเร็ว
Koa.js คืออะไร?
Koa.js คือเฟรมเวิร์กเว็บแบบ next-gen ที่สร้างโดยทีม Express.js โดยใช้ Node.js เป็นพื้นฐาน มีจุดเด่นด้านความเรียบง่าย เข้าใจง่าย และฟีเจอร์ทรงพลัง เหมาะสำหรับสร้างเว็บแอปและ API Koa.js รองรับฟีเจอร์ใหม่ ๆ ของ JavaScript โดยเฉพาะ async/await ซึ่งทำให้งาน asynchronous และการเขียน middleware เป็นเรื่องง่ายและชัดเจน ช่วยให้โค้ดดูดีและดูแลง่าย
จุดเด่นสำคัญของ Koa.js
- ออกแบบโดยใช้ async/await: การควบคุมโฟลวแบบ asynchronous เป็นธรรมชาติด้วย
async/await - ขนาด core เล็กมาก: ตัวเริ่มต้นของ Koa มีฟังก์ชันหลักที่จำเป็นเท่านั้น ขยายฟังก์ชันผ่าน middleware
- ระบบ middleware ที่ทรงพลัง: การทำงานเป็นชั้น ๆ (cascading) โฟลวการประมวลผลคำขอชัดเจน ง่ายต่อการปรับแต่ง
- เน้นงานเว็บโดยเฉพาะ: ไม่มีฟีเจอร์ส่วนเกิน เน้นเฉพาะการสร้างเว็บและ API
Koa.js ช่วยให้นักพัฒนาสร้างเว็บเซอร์วิสคุณภาพสูงและดูแลรักษาได้ง่าย
สร้างสภาพแวดล้อม Koa.js ด้วย ServBay
ServBay รองรับ Node.js พร้อมฐานข้อมูลทั่วไป คุณสามารถใช้ฟีเจอร์ Website ของ ServBay เข้าถึงโปรเจกต์ Koa.js ของคุณผ่านโดเมนส่วนตัวและใบรับรอง SSL ได้แบบง่าย ๆ
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น โปรดเตรียมสิ่งเหล่านี้ให้พร้อม:
- ติดตั้ง ServBay: ดาวน์โหลดและติดตั้งจาก เว็บไซต์อย่างเป็นทางการของ ServBay
- ติดตั้ง Node.js package: เปิดแอป ServBay ไปที่เมนู Packages และตรวจสอบว่าได้ติดตั้ง Node.js รุ่นที่ต้องใช้แล้ว หากยังไม่ติดตั้ง ให้เลือกและคลิก Install
- คุ้นเคยกับขั้นตอนพื้นฐาน ServBay: เรียนรู้วิธีเปิด/ปิดเซอร์วิส และจัดการ Website ใน ServBay
สร้างโปรเจกต์ Koa.js
ใช้ไดเรกทอรีเว็บไซต์ default ของ ServBay คือ /Applications/ServBay/www สำหรับไฟล์ของโปรเจกต์
สร้างไดเรกทอรีโปรเจกต์
เปิด Terminal ไปที่ root ของเว็บไซต์ ServBay จากนั้นสร้างโฟลเดอร์ใหม่ (ตัวอย่าง
servbay-koa-app) จากนั้นเข้าไปในโฟลเดอร์และ initialize โปรเจกต์ Node.js:bashcd /Applications/ServBay/www mkdir servbay-koa-app cd servbay-koa-app npm init -y1
2
3
4คำสั่ง
npm init -yจะสร้างไฟล์package.jsonแบบ default ให้คุณติดตั้ง Koa.js
ที่ root project
servbay-koa-appใช้ npm ติดตั้ง Koa.js และ type definition (หากใช้ TypeScript):bashnpm install koa # ถ้าใช้ TypeScript ให้ติดตั้ง type ด้วย # npm install @types/koa --save-dev1
2
3สร้างไฟล์ entry ของแอป
สร้างไฟล์ชื่อ
app.jsภายในโฟลเดอร์โปรเจกต์ จากนั้นใส่โค้ดตัวอย่างนี้:javascriptconst Koa = require('koa'); const app = new Koa(); // middleware: บันทึกข้อมูล request app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }); // middleware: จัดการ request ที่ path root app.use(async ctx => { ctx.body = 'Hello from ServBay Koa.js App!'; }); // กำหนด port โดยใช้ environment variable PORT หากมี const port = process.env.PORT || 3000; // เริ่มต้น HTTP server app.listen(port, () => { console.log(`Koa.js server running on http://localhost:${port}`); console.log(`Project path: ${__dirname}`); });1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24โค้ดนี้สร้าง Koa app ง่าย ๆ มี middleware สองอัน: สำหรับ log เวลาและ path ของ request, และสำหรับตอบกลับเมื่อมี request มาที่
/แอปรันที่ PORT ตาม environment variable หรือ default ที่ 3000
เข้าสู่โหมดพัฒนา
ขณะพัฒนา ปกติคุณจะรัน Node.js process ของ Koa.js แล้วใช้งานผ่านฟีเจอร์ Website ของ ServBay
รัน Koa.js development server
เปิด Terminal ไปที่โฟลเดอร์
servbay-koa-appแล้วใช้คำสั่งnodeเพื่อรันapp.jsสามารถระบุ port (แนะนำ 8585 เพื่อหลีกเลี่ยงชนกับโปรแกรมอื่น):bashcd /Applications/ServBay/www/servbay-koa-app PORT=8585 node app.js1
2ใน Terminal จะเห็นข้อความแบบ
Koa.js server running on http://localhost:8585แปลว่า server พร้อม รันอยู่ที่ port 8585 อย่าปิดหน้าต่างนี้ขณะที่พัฒนาตั้งค่า reverse proxy Website ใน ServBay
เพื่อเข้าถึง Koa.js ที่
localhost:8585ผ่านโดเมนส่วนตัว ให้กำหนด Website ใหม่ใน ServBay แบบ reverse proxy- เปิดแอป ServBay
- ไปที่เมนู Website
- กดปุ่ม
+ด้านล่างซ้ายเพื่อเพิ่ม Website ใหม่ - กรอกข้อมูล:
- Name:
ServBay Koa.js Dev Site - Domain:
servbay-koa-dev.servbay.demo(แนะนำใช้โดเมนลงท้ายด้วย.servbay.demoServBay จะออกใบรับรอง SSL ให้อัตโนมัติ) - Type: เลือก
Reverse Proxy - IP Address:
127.0.0.1(ชี้ไป Node.js ที่รันในเครื่อง) - Port:
8585(port ที่ Koa.js รับ request) - Document Root: สำหรับ reverse proxy ช่องนี้ไม่ได้ใช้ สามารถว่างหรือใส่ path
/Applications/ServBay/www/servbay-koa-app
- Name:
- กด Save
- หาก ServBay ขอให้ Apply changes ให้คลิกเพื่อดำเนินการ
เมื่อเสร็จ ServBay จะแก้ไข hosts file ให้โดเมน
servbay-koa-dev.servbay.demoไปที่127.0.0.1โดยใช้ reverse proxy จาก Caddy หรือ Nginx เปลี่ยน request ที่มาจากโดเมนนี้ให้ไปยัง port 8585 ใช้ใบรับรอง SSL ที่ออกในระบบ คุณจะเข้าถึงผ่าน HTTPS ได้อย่างปลอดภัยหากต้องการดูรายละเอียดเพิ่มเติม ดูที่ เอกสาร ServBay สำหรับเพิ่ม Node.js development website เลือกเวอร์ชั่นภาษาอังกฤษ
เข้าใช้งาน Koa.js website
เปิดเว็บบราวเซอร์ ไปที่
https://servbay-koa-dev.servbay.demoหากตั้งค่าถูกต้อง จะมีข้อความ "Hello from ServBay Koa.js App!" บนหน้าเว็บ แสดงว่าเชื่อมต่อกับ Koa.js server ผ่านระบบของ ServBay เรียบร้อยแล้ว เมื่อแก้ไขไฟล์
app.jsและ restart process Node.js ให้รีเฟรชบราวเซอร์จะเห็นความเปลี่ยนแปลง
จำลองการ deploy production
หากต้องการทดสอบ production อาจใช้ port หรือ environment variable ต่างกัน ServBay สามารถตั้ง reverse proxy ได้เหมือนเดิม
รัน Koa.js ในโหมด production (จำลอง)
เปิด Terminal ใหม่ หยุดเซิร์ฟเวอร์เดิม (ถ้ายังรันอยู่) แล้วรันโหมด production ด้วย port 8586 และตั้ง
NODE_ENVเป็น production:bashcd /Applications/ServBay/www/servbay-koa-app PORT=8586 NODE_ENV=production node app.js1
2จะมี Koa.js instance ฟัง port 8586 จำลองเป็น production
ตั้งค่า reverse proxy Website สำหรับ production
ใน ServBay สร้าง Website อีกตัวสำหรับ production:
- เปิดแอป ServBay ไปที่ Website
- กดปุ่ม
+เพื่อสร้าง Website ใหม่ - กรอกข้อมูล:
- Name:
ServBay Koa.js Prod Site - Domain:
servbay-koa-prod.servbay.demo(หากใช้โดเมนส่วนตัว สามารถขอใบรับรอง SSL ฟรีผ่าน Let's Encrypt ได้ใน ServBay) - Type: เลือก
Reverse Proxy - IP Address:
127.0.0.1 - Port:
8586(Koa.js ที่ production) - Document Root: ว่างหรือใส่ path โปรเจกต์ก็ได้
- Name:
- กด Save และ Apply changes
ถ้าใช้โดเมน
.servbay.demoจะใช้ใบรับรองจาก ServBay User CA สำหรับโดเมนสาธารณะ ServBay รองรับ ACME (Let's Encrypt) ออกใบรับรอง SSL/TLS ฟรี ดูรายละเอียดเพิ่มเติมที่ การใช้ SSL ป้องกันเว็บไซต์ใน ServBayเข้าใช้งาน Koa.js ที่ production (จำลอง)
เปิดเว็บบราวเซอร์ ไปที่
https://servbay-koa-prod.servbay.demoจะเห็นข้อความเหมือน environment development แต่ request จะถูกส่งผ่าน reverse proxy ไปที่ port 8586 ของ Node.js process
การเชื่อมต่อฐานข้อมูล
ServBay รวมฐานข้อมูลยอดนิยม เช่น MongoDB, Redis, MariaDB (ใช้งานแบบ MySQL ได้) และ PostgreSQL คุณสามารถเชื่อมต่อผ่าน localhost ได้โดยตรงเมื่อฐานข้อมูลเหล่านี้เปิดใช้งานใน ServBay
ตัวอย่างโค้ดต่อไปนี้ใช้งานไลบรารี Node.js เชื่อมต่อฐานข้อมูลใน ServBay โปรดแน่ใจว่าติดตั้งฐานข้อมูลที่ต้องการใน Packages ของ ServBay และเปิดใช้งานเรียบร้อยแล้ว
เชื่อมต่อ MongoDB
ในโฟลเดอร์โปรเจกต์ ติดตั้งไลบรารีสำหรับ MongoDB (เช่น
mongooseหรือmongodb):bashcd /Applications/ServBay/www/servbay-koa-app npm install mongoose # หรือ npm install mongodb1
2แล้วเพิ่มโค้ดเชื่อมต่อใน
app.jsหรือโมดูลอื่น:javascript// ใช้ Mongoose เชื่อมต่อ MongoDB const mongoose = require('mongoose'); // ServBay ค่า default ไม่ต้องใช้ authentication ตั้งชื่อฐานข้อมูลเองได้ mongoose.connect('mongodb://localhost:27017/servbay-koa-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('Connected to MongoDB')) .catch(err => console.error('MongoDB connection error:', err)); // หมายเหตุ: ในงานจริงใส่โค้ดนี้ในจุดเริ่มต้นของแอป // และ listen ที่ port เมื่อเชื่อมต่อสำเร็จ1
2
3
4
5
6
7
8
9
10
11
12
13MongoDB ที่ติดตั้งใน ServBay จะเปิดที่ port
27017และไม่ต้องใส่ user/password สามารถสร้างฐานข้อมูลใหม่ได้ทันทีเชื่อมต่อ Redis
ติดตั้งไลบรารีสำหรับ Redis:
bashcd /Applications/ServBay/www/servbay-koa-app npm install redis1
2จากนั้นเชื่อมต่อ Redis:
javascript// ใช้ redis client เชื่อมกับ Redis server const redis = require('redis'); // สร้าง client โดย default จะเชื่อมต่อ localhost:6379 const client = redis.createClient({ url: 'redis://localhost:6379' // ค่า default ของ ServBay คือ 6379 }); client.on('connect', () => { console.log('Connected to Redis'); }); client.on('error', (err) => { console.error('Redis connection error:', err); }); // เชื่อมต่อ Redis server client.connect(); // หมายเหตุ: ในงานจริง รอให้เชื่อมต่อสำเร็จก่อนจะใช้ client // สามารถใช้ async/await กับ client.connect()1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Redis ของ ServBay เปิดที่ port
6379โดยไม่ต้องใส่รหัสผ่านเชื่อมต่อ MariaDB (หรือ MySQL)
MariaDB สามารถใช้แทน MySQL ได้ ServBay เตรียม MariaDB ให้ใช้งาน
ติดตั้งไลบรารี MariaDB:
bashcd /Applications/ServBay/www/servbay-koa-app npm install mariadb # หรือ npm install mysql2 (แนะนำเพราะความเข้ากันดี)1
2เชื่อมต่อด้วย
mariadb:javascript// ใช้ mariadb client เชื่อมกับ MariaDB const mariadb = require('mariadb'); // รหัสผ่าน root เริ่มต้นของ ServBay คือ 'password' const pool = mariadb.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'servbay_koa_app', // ต้องสร้างฐานข้อมูลก่อน หรือเปลี่ยนชื่อ connectionLimit: 5 }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); conn.release(); // ส่ง connection กลับ pool }) .catch(err => { console.error("MariaDB connection error:", err); }); // หมายเหตุ: การดึง connection จาก pool เป็น async operation1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22หรือใช้งานผ่านไลบรารี
mysql2(แนะนำ):javascript// ใช้ mysql2 client เชื่อมกับ MariaDB/MySQL const mysql = require('mysql2/promise'); // เวอร์ชั่นที่ใช้ promise // รหัสผ่าน root เริ่มต้นคือ 'password' const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'servbay_koa_app', // แน่ใจว่ามีฐานข้อมูลนี้ waitForConnections: true, connectionLimit: 10, queueLimit: 0 }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB/MySQL using mysql2"); conn.release(); // ปล่อย connection กลับ pool }) .catch(err => { console.error("MariaDB/MySQL connection error:", err); }); // หมายเหตุ: รหัสผ่าน root สามารถดูหรือเปลี่ยนได้ใน ServBay GUI // ควรหลีกเลี่ยง hard-code password ในโปรเจกต์จริง ใช้ environment variable จะดีกว่า1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25MariaDB จะเปิดฟังที่ port
3306password สามารถดูในหน้าตั้งค่าฐานข้อมูลของ ServBay อาจต้องใช้ tool เช่น TablePlus, DBeaver เพื่อสร้าง databaseservbay_koa_appก่อนเชื่อมต่อ PostgreSQL
ติดตั้งไลบรารี pg:
bashcd /Applications/ServBay/www/servbay-koa-app npm install pg1
2แล้วเชื่อมต่อ PostgreSQL:
javascript// ใช้ pg client เชื่อมต่อ PostgreSQL const { Pool } = require('pg'); // ผู้ใช้ default 'user' รหัสผ่าน 'password' const pool = new Pool({ user: 'user', // default ของ ServBay host: 'localhost', database: 'servbay_koa_app', // สร้างฐานข้อมูลก่อน password: 'password', // รหัสผ่าน default port: 5432, // ค่า default ของ ServBay }); pool.connect((err, client, done) => { if (err) { console.error('PostgreSQL connection error:', err); return; } console.log('Connected to PostgreSQL'); client.release(); // ส่งกลับไปที่ pool }); // หมายเหตุ: user และ password ดูหรือแก้ไขได้ใน ServBay GUI // ควรหลีกเลี่ยง hard-code password1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23PostgreSQL จะเปิดฟังที่ port
5432username กับ password เหมือนตัวอย่าง อาจต้องใช้ ServBay หรือ tool สร้าง databaseservbay_koa_appก่อน
การจัดการฐานข้อมูล ServBay
คุณสามารถใช้ graphical client tool เพื่อดูและจัดการฐานข้อมูลด้วยการเชื่อมต่อกับข้อมูลบน localhost โดยใช้ port, username, password ที่แสดงใน ServBay GUI
- ดู/แก้ไข password default: ไปที่หน้าตั้งค่าของแต่ละฐานข้อมูลใน ServBay คลิกไอคอน setting จะเห็น user/password ที่ตั้งไว้ สามารถแก้ไขได้
- สร้าง database/user: ใช้ tool เช่น TablePlus, DBeaver, pgAdmin, MongoDB Compass เชื่อม database ใน ServBay สร้าง user/database/table ได้สะดวก
ข้อควรระวัง
- port clash: ตรวจสอบให้แน่ใจว่า port ที่เลือก (เช่น 8585 หรือ 8586) ไม่ชนกับแอปอื่นในระบบ
- ServBay status: เช็คว่า ServBay, Node.js package และ database ที่จำเป็นเปิดอยู่
- hosts file: ServBay ดูแลไฟล์ hosts ให้อัตโนมัติ ตรวจสอบ
/etc/hostsถ้ามีปัญหา - firewall: macOS firewall หรือโปรแกรม third-party ไม่ควรบล็อกการเชื่อมต่อ ServBay หรือ Node.js
- log: ปัญหาใด ๆ ให้ดู log ในส่วน ServBay app หรือ output ของ Node.js ใน Terminal เพื่อช่วย debug
คำถามที่พบบ่อย (FAQ)
ถาม: ทำไมต้องใช้ reverse proxy ของ ServBay เพื่อเข้าโปรเจกต์ Koa.js?
ตอบ: reverse proxy (ผ่านฟีเจอร์ Website ของ ServBay) มีข้อดีหลายข้อ:
- จำลองสภาพจริง: ใช้โดเมนที่กำหนดเอง (เช่น
.servbay.demoหรือโดเมนของคุณ) ไม่ใช่localhost:PORTทำให้เหมือนเว็บไซต์จริง - รองรับ SSL: ServBay ตั้งค่า SSL อัตโนมัติ (ผ่าน User CA หรือ Let's Encrypt) ทดสอบ HTTPS ได้ตั้งแต่ขั้นพัฒนา
- จัดการรวมศูนย์: จัดการทุกเว็บไซต์ local ใน ServBay ได้สะดวก
- ซ่อน port: ผู้ใช้งานหรือบราวเซอร์เข้าผ่าน port มาตรฐาน 80/443 ระบบภายใน forward ไปยัง Node.js port สูง
- จำลองสภาพจริง: ใช้โดเมนที่กำหนดเอง (เช่น
ถาม: สามารถเข้าใช้งานแบบ
localhost:PORTโดยไม่ใช้ reverse proxy ได้ไหม?ตอบ: ทำได้ ถ้า Koa.js ของคุณฟังที่ port ที่ต้องการ (เช่น 3000 หรืออื่น ๆ) สามารถเข้าใช้งานโดยตรงผ่าน browser ที่
http://localhost:PORTได้ แต่จะไม่ได้ใช้ฟีเจอร์เสริมเช่น โดเมนส่วนตัว, SSL, การดู log แบบรวม ฯลฯ สำหรับงานที่อยากจำลอง production จริง ๆ reverse proxy ของ ServBay จะสะดวกกว่าถาม: รหัสผ่าน default ของฐานข้อมูล ServBay คืออะไร? เปลี่ยนได้อย่างไร?
ตอบ: ดูรหัสผ่านได้ในหน้า ฐานข้อมูล ของ ServBay แต่ละฐานข้อมูล (MariaDB, PostgreSQL ฯลฯ) มีไอคอน setting ให้ดู username/password กำหนดเองได้ในหน้านั้น ควรเปลี่ยนรหัสผ่าน default เพื่อความปลอดภัย
สรุป
บทความนี้ได้นำเสนอวิธีใช้งาน ServBay เพื่อสร้างสภาพแวดล้อมพัฒนา Koa.js บน macOS อย่างครบถ้วน ตั้งแต่สร้างโปรเจกต์ Koa.js เบื้องต้น การตั้งค่า reverse proxy ผ่านฟีเจอร์ Website ของ ServBay สามารถเข้าใช้งานด้วยโดเมนส่วนตัวและ HTTPS ทั้ง development และ production แบบจำลอง รวมถึงการเชื่อมต่อฐานข้อมูลยอดนิยมด้วย
ServBay คือเครื่องมือที่ตอบโจทย์นักพัฒนา Node.js ในเรื่อง local development แบบครบวงจร ช่วยให้คุณโฟกัสกับการเขียนโค้ด ไม่ต้องเสียเวลาจัดการสภาพแวดล้อมมากมาย ใช้ ServBay เพื่อเติมเต็ม productivity ของคุณได้อย่างเต็มประสิทธิภาพ
