สร้างและรันโปรเจ็กต์ Koa.js ด้วย ServBay
ServBay คือเครื่องมือสภาพแวดล้อมการพัฒนาเว็บแบบโลคอลที่ออกแบบมาสำหรับ macOS โดยเฉพาะ มาพร้อมชุดซอฟต์แวร์สำหรับนักพัฒนาครบครัน อาทิ Node.js และฐานข้อมูลยอดนิยมหลายชนิด ในบทความนี้คุณจะได้เรียนรู้วิธีสร้าง รัน และจัดการโปรเจ็กต์ Koa.js ของคุณอย่างรวดเร็วด้วยความสะดวกจาก ServBay
Koa.js คืออะไร?
Koa.js คือเฟรมเวิร์กเว็บยุคใหม่บน Node.js สร้างโดยทีมงานเดียวกับ Express.js มีจุดเด่นที่ความเรียบง่าย กระชับ ใช้งานง่าย และทรงพลัง เหมาะสุดสำหรับการสร้างเว็บแอปพลิเคชันและ API ที่ทันสมัย โดย Koa.js รองรับฟีเจอร์ JavaScript ล่าสุดโดยเฉพาะ async/await
อย่างเต็มที่ ช่วยให้เขียนโค้ดแบบ asynchronous ได้อย่างสะดวกและเข้าใจง่าย ส่งผลให้ดูแลรักษาโค้ดสะดวกยิ่งขึ้น
คุณสมบัติเด่นของ Koa.js
- พื้นฐาน async/await: โครงสร้างใช้
async/await
ทำให้จัดการ flow แบบ async ได้อย่างเป็นธรรมชาติ - แกนเล็กและเบา: ไลบรารีหลักของ Koa ขนาดเล็ก เน้นฟังก์ชันที่จำเป็นเท่านั้น การขยายฟีเจอร์จะใช้โมดูล middleware
- ระบบ middleware ทรงพลัง: ใช้กลไก middleware แบบ cascading ทำให้สายงานประมวลผลคำขอ (request) ชัดเจนและยืดหยุ่น
- เน้นพัฒนาเว็บโดยตรง: โฟกัสงานด้านเว็บและ API ไม่บวมฟีเจอร์ที่ไม่จำเป็น
การใช้ Koa.js จะช่วยให้นักพัฒนาสร้างเซอร์วิสที่ทรงประสิทธิภาพและดูแลรักษาง่ายได้อย่างมีประสิทธิผล
การติดตั้งสภาพแวดล้อม Koa.js ด้วย ServBay
ServBay มอบสภาพแวดล้อม Node.js ที่พร้อมใช้งาน มีฐานข้อมูลยอดนิยมในตัว พร้อมฟีเจอร์ Website ให้คุณสร้างโดเมน SSL แบบ custom เพื่อเข้าถึงโปรเจ็กต์ Koa.js ที่รันอยู่บนเครื่องของคุณได้อย่างง่ายดาย
ข้อกำหนดเบื้องต้น
ก่อนเริ่ม โปรดตรวจสอบว่าคุณเตรียมสิ่งเหล่านี้ครบถ้วน:
- ติดตั้ง ServBay: ไปที่ เว็บไซต์ ServBay เพื่อดาวน์โหลดและติดตั้งเวอร์ชันล่าสุด
- ติดตั้งแพ็กเกจ Node.js: เปิดแอป ServBay เข้าสู่หน้า Packages ตรวจสอบว่ามี Node.js เวอร์ชันที่ต้องใช้ หากยังไม่มีให้เลือกติดตั้งได้เลย
- เรียนรู้พื้นฐาน ServBay: เข้าใจขั้นตอนการเริ่ม/หยุดบริการและการจัดการเว็บไซต์ (Website) ใน ServBay
การสร้างโปรเจ็กต์ Koa.js
โปรเจ็กต์จะถูกจัดเก็บไว้ที่ไดเรกทอรี /Applications/ServBay/www
ตามคำแนะนำของ ServBay
สร้างโฟลเดอร์โปรเจ็กต์
เปิด Terminal ไปยังโฟลเดอร์ www แล้วสร้างโฟลเดอร์ใหม่ (เช่น
servbay-koa-app
) พร้อมเริ่มต้น Node.js โปรเจ็กต์:bashcd /Applications/ServBay/www mkdir servbay-koa-app cd servbay-koa-app npm init -y
1
2
3
4คำสั่ง
npm init -y
จะสร้างไฟล์package.json
ให้โดยอัตโนมัติติดตั้ง Koa.js
ติดตั้ง Koa.js ด้วย npm (หากใช้ TypeScript สามารถติดตั้งไฟล์ type ด้วย):
bashnpm install koa # ถ้าใช้ TypeScript ให้ติดตั้ง type definition # npm install @types/koa --save-dev
1
2
3สร้างไฟล์เริ่มต้นแอป
สร้างไฟล์
app.js
ในโฟลเดอร์โปรเจ็กต์ จากนั้นเพิ่มโค้ดตัวอย่างด้านล่างjavascriptconst Koa = require('koa'); const app = new Koa(); // มิดเดิลแวร์: บันทึกข้อมูลคำขอ app.use(async (ctx, next) => { const start = Date.now(); await next(); const ms = Date.now() - start; console.log(`${ctx.method} ${ctx.url} - ${ms}ms`); }); // มิดเดิลแวร์: ตอบสนองคำขอที่ root app.use(async ctx => { ctx.body = 'Hello from ServBay Koa.js App!'; }); // กำหนดพอร์ตโดยใช้ PORT env หรือ 3000 const port = process.env.PORT || 3000; // เริ่มเซิร์ฟเวอร์ HTTP 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 พื้นฐาน มีมิดเดิลแวร์สองตัว — ตัวหนึ่งสำหรับบันทึกเวลาและเส้นทางคำขอ อีกตัวไว้ตอบที่
/
ด้วยข้อความ "Hello from ServBay Koa.js App!" โดยแอปรันที่พอร์ตPORT
หรือค่าเริ่มต้น 3000
โหมดการพัฒนา
สำหรับการพัฒนา จะรันโปรเซส Node.js ท้องถิ่น พร้อมใช้ Website ของ ServBay เพื่อเข้าถึง Koa.js เหมือนเว็บจริง
รันเซิร์ฟเวอร์ Koa.js โหมด dev
เปิด Terminal ไปยังไดเรกทอรีโปรเจ็กต์จากนั้นรันไฟล์
app.js
กำหนดพอร์ตเพื่อความสะดวกในการตั้งค่า ServBay เช่น8585
bashcd /Applications/ServBay/www/servbay-koa-app PORT=8585 node app.js
1
2Terminal จะแสดงผลประมาณ
Koa.js server running on http://localhost:8585
แสดงว่าเซิร์ฟเวอร์เริ่มต้นสำเร็จตั้งค่า Reverse Proxy เว็บไซต์ใน ServBay
เพื่อให้เข้าถึงโปรเจ็กต์ผ่านโดเมนที่คุณกำหนด (เช่น
servbay-koa-dev.servbay.demo
) ให้ตั้งค่า Reverse Proxy ในส่วนเว็บไซต์ (Website) ของ ServBay- เปิดแอป ServBay
- เข้าหน้า Website
- คลิก
+
เพิ่มเว็บไซต์ใหม่ - ตั้งค่าดังนี้:
- Name:
ServBay Koa.js Dev Site
- Domain:
servbay-koa-dev.servbay.demo
(แนะนำให้ใช้ .servbay.demo ServBay จะสร้าง SSL ให้อัตโนมัติ) - Type: เลือก
Reverse Proxy
- IP Address:
127.0.0.1
- Port:
8585
(ตามที่รัน Node.js) - Document Root: เว้นว่างหรือระบุโฟลเดอร์โปรเจ็กต์
/Applications/ServBay/www/servbay-koa-app
- Name:
- กดบันทึกและ Apply
ServBay จะอัปเดตไฟล์โฮสต์ของคุณและใช้ Caddy หรือ Nginx Proxy ไปยัง
localhost:8585
ให้อัตโนมัติ พร้อม SSL แบบน่าเชื่อถือหากต้องการดูขั้นตอนละเอียด อ่าน เอกสารการเพิ่ม Node.js Developer Website (เลือกฉบับภาษาอังกฤษ)
เปิดเว็บไซต์ Koa.js ในเบราว์เซอร์
เข้าสู่เบราว์เซอร์ที่คุณต้องการ แล้วไปที่
https://servbay-koa-dev.servbay.demo
หากตั้งค่าถูกต้อง จะพบข้อความ "Hello from ServBay Koa.js App!" แสดงถึงการเชื่อมต่อสำเร็จ หลังแก้ไข
app.js
ถ้าต้องการเห็นผลให้รีสตาร์ท Node.js แล้วรีเฟรชเบราว์เซอร์
การดีพลอยจำลอง (Production Simulation)
หากจะจำลองสภาพแวดล้อม production เช่น ใช้พอร์ต/ตัวแปร environment ที่ต่างออกไป หรือรันด้วยโหมดอื่น ServBay ก็รองรับการตั้งค่า reverse proxy ได้เหมือนเดิม
รันโปรเซส Koa.js ในโหมด production (จำลอง)
หยุดเซิร์ฟเวอร์โหมด dev ก่อน (หากเปิดอยู่) แล้วรันใหม่ด้วย config จำลอง production เช่น พอร์ต
8586
และNODE_ENV=production
:bashcd /Applications/ServBay/www/servbay-koa-app PORT=8586 NODE_ENV=production node app.js
1
2เท่านี้ก็ได้เซิร์ฟเวอร์ Koa.js ที่ฟังก์ชันเหมือนสภาพแวดล้อม production จริง
ตั้งค่า Reverse Proxy สำหรับ production
สร้างเว็บไซต์ใหม่ใน ServBay สำหรับ production simulation:
- เปิด ServBay, ไปหน้า Website
- กด
+
เพื่อเพิ่มเว็บไซต์ใหม่ - ตั้งค่า:
- Name:
ServBay Koa.js Prod Site
- Domain:
servbay-koa-prod.servbay.demo
(หากใช้โดเมนตัวเอง สามารถใช้ ACME/Let's Encrypt ขอ SSL ได้) - Type:
Reverse Proxy
- IP Address:
127.0.0.1
- Port:
8586
- Document Root: ว่างหรือระบุ path โปรเจ็กต์
- Name:
- กด Save และ Apply
หากใช้โดเมน
.servbay.demo
จะใช้ SSL CA ของ ServBay อัตโนมัติ แต่ถ้าเป็นโดเมนของคุณเอง ServBay รองรับ Let's Encrypt ด้วย อ่านเพิ่มได้ที่ เอกสารการใช้ SSLทดสอบเข้าใช้งาน production site
เปิดเบราว์เซอร์ไปที่
https://servbay-koa-prod.servbay.demo
คุณจะเห็นผลลัพธ์เหมือนกับ environment การพัฒนา เพียงแต่เบื้องหลังเปลี่ยนไปใช้ reverse proxy ส่งคำขอไปยังโปรเซส Node.js พอร์ต 8586
การเชื่อมต่อฐานข้อมูล
ServBay รองรับฐานข้อมูลยอดนิยม อาทิ MongoDB, Redis, MariaDB (MySQL-compatible) และ PostgreSQL คุณสามารถเชื่อมต่อผ่านโค้ด Node.js ได้โดยตรงเพราะฐานข้อมูลเหล่านี้รันอยู่บน localhost ด้วยพอร์ตมาตรฐาน
ต่อไปนี้คือตัวอย่างโค้ดเชื่อมต่อฐานข้อมูลในโปรเจ็กต์ Koa.js ของคุณ *โปรดแน่ใจว่าคุณติดตั้งฐานข้อมูลนั้นผ่านหน้าต่าง Packages ของ ServBay และเปิดไว้แล้ว
เชื่อมต่อ MongoDB
ติดตั้งไลบรารีเชื่อมต่อ เช่น
mongoose
หรือmongodb
:bashcd /Applications/ServBay/www/servbay-koa-app npm install mongoose # หรือ npm install mongodb
1
2จากนั้น เพิ่มโค้ดใน
app.js
หรือโมดูลที่ใช้เชื่อมต่อ:javascript// เชื่อมต่อ MongoDB ด้วย Mongoose const mongoose = require('mongoose'); // ServBay ตั้งค่า MongoDB ให้เชื่อมต่อได้โดยไม่ต้องใส่ user/pass ชื่อ database กำหนดเองได้ 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)); // หมายเหตุ: ปกติจะควรเชื่อมต่อฐานข้อมูลระหว่าง boot application // และค่อยเริ่มฟังพอร์ตเมื่อเชื่อมต่อสำเร็จ
1
2
3
4
5
6
7
8
9
10
11
12
13MongoDB ที่ติดตั้งกับ ServBay ใช้พอร์ต
27017
โดยค่า default ไม่ต้องกรอก user/passเชื่อมต่อ Redis
ติดตั้งไลบรารี redis:
bashcd /Applications/ServBay/www/servbay-koa-app npm install redis
1
2จากนั้นเชื่อมต่อตามนี้:
javascript// สร้าง client เพื่อเชื่อมต่อ Redis const redis = require('redis'); // สร้าง Redis client, ค่า default คือ localhost:6379 const client = redis.createClient({ url: 'redis://localhost:6379' // พอร์ต default ของ ServBay }); client.on('connect', () => { console.log('Connected to Redis'); }); client.on('error', (err) => { console.error('Redis connection error:', err); }); // เริ่มเชื่อมต่อ Redis client.connect(); // หมายเหตุ: การใช้งานจริงควรรอจนเชื่อมต่อสำเร็จก่อนใช้ client // เช่นรอ connect() ด้วย async/await
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Redis โดยค่า default บน ServBay ใช้พอร์ต
6379
ไม่ต้องใช้รหัสผ่านเชื่อมต่อ MariaDB (หรือ MySQL)
MariaDB เป็นอีกตัวเลือกที่เข้ากันกับ MySQL ได้แทบทั้งหมด ServBay มีแพ็กเกจ MariaDB คุณจึงใช้แบบ MySQL ได้
ติดตั้ง Node.js driver ของ MariaDB:
bashcd /Applications/ServBay/www/servbay-koa-app npm install mariadb # หรือ npm install mysql2 (แนะนำ)
1
2ตัวอย่างเชื่อมต่อด้วย mariadb:
javascript// เชื่อมต่อ MariaDB ด้วย mariadb client const mariadb = require('mariadb'); // ค่า default root password ของ ServBay คือ 'password' const pool = mariadb.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'servbay_koa_app', // สร้าง database นี้ไว้แล้วหรือเปลี่ยนตามต้องการ connectionLimit: 5 }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); conn.release(); // คืนการเชื่อมต่อกลับ pool }) .catch(err => { console.error("MariaDB connection error:", err); }); // หมายเหตุ: การดึง connection จาก pool เป็น async
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22หรือถ้าใช้ mysql2 (แนะนำ):
javascript// เชื่อมต่อ MariaDB/MySQL ด้วย mysql2 (promise) const mysql = require('mysql2/promise'); // ค่า default root password ของ ServBay คือ '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 }) .catch(err => { console.error("MariaDB/MySQL connection error:", err); }); // หมายเหตุ: root password สามารถดูหรือเปลี่ยนได้ใน ServBay GUI // ควรหลีกเลี่ยง hardcode password ในโปรเจ็กต์จริง ใช้ env แทนจะดีกว่า
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 ของ ServBay ใช้พอร์ต
3306
ค่าเริ่มต้น user และ password สามารถดูได้ใน GUI ฐานข้อมูลต้องสร้างล่วงหน้าด้วยเชื่อมต่อ PostgreSQL
ติดตั้งไลบรารี pg:
bashcd /Applications/ServBay/www/servbay-koa-app npm install pg
1
2ตัวอย่างเชื่อมต่อ:
javascript// สร้าง pool เพื่อเชื่อมต่อ PostgreSQL const { Pool } = require('pg'); // user และ password ค่า default ดูได้จาก ServBay GUI const pool = new Pool({ user: 'user', // Default ของ ServBay host: 'localhost', database: 'servbay_koa_app', // สร้าง database นี้ไว้แล้ว password: 'password', // Default password port: 5432, // ServBay ใช้พอร์ตนี้ }); pool.connect((err, client, done) => { if (err) { console.error('PostgreSQL connection error:', err); return; } console.log('Connected to PostgreSQL'); client.release(); // คืน connection กลับ pool }); // หมายเหตุ: user และ password สามารถดู/เปลี่ยนได้ที่ ServBay GUI // ในการใช้งานจริงควรเลี่ยงการ hardcode password
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23PostgreSQL ของ ServBay ใช้พอร์ต
5432
และต้องสร้าง database ล่วงหน้าเช่นกัน
เครื่องมือจัดการฐานข้อมูลใน ServBay
นอกจากเชื่อมต่อผ่านโค้ดแล้ว คุณสามารถใช้โปรแกรม GUI เพื่อจัดการฐานข้อมูลของ ServBay ได้โดยตรง ServBay ตั้งค่าฐานข้อมูลให้เชื่อมต่อผ่าน 127.0.0.1
หรือ localhost
ด้วย credential จากแอป ServBay
- ดู/เปลี่ยนรหัสผ่าน default: ไปที่แอป ServBay ตรงฐานข้อมูลที่ต้องการ ดูหรือเปลี่ยนรหัสผ่านได้ในหน้าตั้งค่า
- สร้างฐานข้อมูล/ผู้ใช้: ใช้โปรแกรมอย่าง TablePlus, DBeaver, pgAdmin, MongoDB Compass ฯลฯ เชื่อมต่อ localhost ตาม port/account แล้วสร้างฐานข้อมูล/ผู้ใช้/ตารางได้ตามต้องการ
ข้อควรระวังและข้อแนะนำ
- การชนกันของพอร์ต: ตรวจสอบว่าพอร์ตที่เลือกใช้กับ Koa.js (เช่น 8585, 8586) ไม่มีโปรแกรมอื่นใช้ซ้ำ
- สถานะของ ServBay: ให้แน่ใจว่าแอป ServBay, Node.js และฐานข้อมูลถูกเปิดอยู่
- ไฟล์ hosts: ServBay จัดการ hosts ให้อัตโนมัติ หากมีปัญหา domain ให้เช็คว่า
/etc/hosts
มี record ถูกต้อง - ไฟร์วอลล์: macOS หรือ firewall third-party อาจบล็อกการเชื่อมต่อ อย่าลืมอนุญาตแอปที่จำเป็น
- ล็อก: หากพบปัญหา ดู log ของ ServBay (ในแท็บ log ของแอป) และ output ของ Node.js จาก Terminal เพื่อวิเคราะห์ปัญหา
คำถามที่พบบ่อย (FAQ)
Q: ทำไมต้องใช้ฟีเจอร์ Reverse Proxy ของ ServBay เพื่อเข้าถึงโปรเจ็กต์ Koa.js?
A: มีข้อดีหลักๆ เช่น
- จำลอง production จริง: การใช้โดเมน custom (.servbay.demo หรือ domain ตัวเอง) จะให้ประสบการณ์ใกล้เคียงของจริงกว่าการเข้าผ่าน localhost:PORT
- รองรับ SSL: ServBay จัดการ SSL certificate อัตโนมัติให้คุณทดสอบ HTTPS ได้ทันที
- บริหารเว็บไซต์ศูนย์กลาง: จัดการ local site ทั้งหมดไว้ในแอปเดียว
- ซ่อนพอร์ต: บุคคลภายนอกหรือเบราว์เซอร์เข้าผ่าน port มาตรฐาน (80/443) แต่ภายในส่งไป port จริงที่รัน Node.js
Q: ไม่ใช้ reverse proxy แต่เข้าตรง localhost:PORT ได้ไหม?
A: ได้ หาก Koa.js ของคุณเปิดฟังที่พอร์ตใดพอร์ตหนึ่ง (เช่น 3000, 8585) สามารถเปิดในเบราว์เซอร์ผ่าน http://localhost:PORT ได้เลย แต่จะขาดฟีเจอร์เช่น SSL, domain, log management ฯลฯ ที่ ServBay มอบให้ ซึ่งจะช่วยให้ environment คล้าย production มากกว่าและสะดวกกว่าสำหรับงานจริง
Q: รหัสผ่านฐานข้อมูลของ ServBay คืออะไรและเปลี่ยนที่ไหน?
A: สามารถดูรหัสผ่าน default ได้ในหน้า Database ของแอป ServBay คลิกไอคอนการตั้งค่า ดู/เปลี่ยนรหัสผ่าน user/root ได้ตลอด เพื่อความปลอดภัยแนะนำเปลี่ยนรหัสผ่าน default ทุกครั้ง
สรุป
บทความนี้นำเสนอวิธีตั้งค่าสภาพแวดล้อม Koa.js ด้วย ServBay บน macOS ตั้งแต่เริ่มโปรเจ็กต์พื้นฐานไปจนถึงการตั้งค่า reverse proxy เพื่อเข้าผ่านโดเมน + HTTPS เช่นเดียวกับ production นอกจากนี้ยังอธิบายขั้นตอนการเชื่อมต่อฐานข้อมูลยอดนิยมต่างๆ ช่วยให้คุณพร้อมสร้างเว็บแอปอย่างมีประสิทธิภาพ
ServBay คือโซลูชั่นครบวงจรที่ออกแบบมาให้นักพัฒนา Node.js ทำงานได้ง่ายขึ้น ให้โฟกัสที่ code ไม่ต้องปวดหัวกับ environment ทำงานมืออาชีพได้อย่างเต็มประสิทธิภาพ!