
กำลังโหลด...

กำลังโหลด...

SQL ทำงานแล้ว ตอนนี้ Express ต้องมีตัวกลางชื่อ pg
เราจะเติมเฉพาะ config และ query ทดสอบ ไม่เขียน setup ยาวจากหน้าว่าง
pg คือสายเชื่อมflowchart LR
A["GET /health"] --> B["Express route"]
B -->|"pool.query(SQL, values)"| C["pg Pool"]
C --> D["PostgreSQL\nlocalhost:5432"]
D -->|"rows"| C
C --> E["res.json(...)"]
pg ไม่ใช่ Database และ Pool ไม่ได้เก็บหนังสือ มันเป็นตัวจัดการ connection เพื่อให้ Express ส่ง SQL ไปหา PostgreSQL ได้
pg ในโฟลเดอร์ books-apiเปิด Terminal ในโฟลเดอร์ books-api (ไม่ใช่ในโฟลเดอร์ abys-platform) แล้วรัน:
npm install pg
pg คือ package ที่ทำให้ Node.js คุยกับ PostgreSQL ได้ โปรเจกต์ books-api มี express และ dotenv อยู่แล้ว จึงเพิ่มเฉพาะ pg
db.js และใส่ค่าการเชื่อมต่อใน .envสร้างไฟล์ใหม่ชื่อ db.js ไว้ข้าง index.js แล้วใส่โค้ดนี้:
// db.js
import pg from "pg";
const { Pool } = pg;
export const pool = new Pool({
host: process.env.DB_HOST,
port: Number(process.env.DB_PORT),
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
});
จากนั้นสร้าง .env ไว้ข้าง index.js:
PORT=3000
DB_HOST=localhost
DB_PORT=5432
DB_NAME=books_db
DB_USER=postgres
DB_PASSWORD=ใส่รหัสของเครื่องตัวเอง
JWT_SECRET=classroom-secret-change-later
.envคือข้อมูลเฉพาะเครื่อง ห้าม commit password จริงขึ้น Git
ยังไม่ต้องเข้าใจ JWT_SECRET ตอนนี้ ให้ใส่ไว้ก่อน: Chapter 4 จะใช้ค่านี้เป็นกุญแจที่ Server ใช้เซ็นและตรวจ JWT Token
| โค้ด | แปลว่า |
|---|---|
process.env.DB_HOST |
อ่านค่า DB_HOST จาก .env |
Number(...) |
port ต้องเป็นตัวเลข |
new Pool(...) |
เตรียมกลุ่ม connection ไว้ใช้ซ้ำ |
/health ใน index.jsใน index.js มีสอง import ที่ต้องมีอยู่แล้ว/ต้องเพิ่ม:
import "dotenv/config"; // มีอยู่แล้ว: ทำให้ process.env อ่าน .env ได้
import express from "express";
import { pool } from "./db.js"; // เพิ่มบรรทัดนี้
หลังบรรทัดนี้:
const app = express();
app.use(express.json());
และ ก่อน route /books ทั้งหมด ให้เพิ่ม route ตรวจการเชื่อมต่อ:
app.get("/health", async (req, res) => {
try {
const result = await pool.query("SELECT NOW() AS now");
res.json({ ok: true, databaseTime: result.rows[0].now });
} catch (error) {
console.error(error);
res.status(500).json({ ok: false, message: "Database connection failed" });
}
});
เปิด http://localhost:3000/health แล้วควรเห็น:
{
"ok": true,
"databaseTime": "2026-..."
}
npm install pg ในโฟลเดอร์ books-api แล้วหรือไม่index.js import { pool } จาก ./db.js แล้วหรือไม่.env มี DB_NAME=books_db หรือไม่postgres หรือไม่npm run dev หลังแก้ .env แล้วหรือไม่
/healthผ่าน = Express และ PostgreSQL คุยกันได้ ก่อนจะเอา SQL จริงใส่ route

ทำตามลำดับนี้ในโปรเจกต์ books-api:
books-api แล้วติดตั้ง package:npm install pg
db.js ไว้ข้าง index.js แล้ว import pg เพื่อสร้าง Pool:// db.js
import pg from "pg";
const { Pool } = pg;
export const pool = new Pool({
host: process.env.TODO,
port: Number(process.env.DB_PORT),
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
});
index.js ต้องมี import เหล่านี้ก่อนใช้ /health:import "dotenv/config";
import express from "express";
import { pool } from "./db.js";
dotenv/config มีอยู่แล้วในโปรเจกต์เดิม ให้เพิ่มเฉพาะ import { pool } from "./db.js";
TODO ใน route /health:app.get("/health", async (req, res, next) => {
try {
const result = await pool.query("SELECT NOW() AS now");
res.json({ ok: true, databaseTime: result.TODO[0].now });
} catch (error) {
next(error);
}
});
