ดึงการกำหนดค่าออกจากโค้ดด้วย dotenv แยกสภาพแวดล้อมการพัฒนาออกจากโปรดักชัน และเก็บข้อมูลลับของคุณให้พ้นจาก Git
เปิดบทเรียนนี้ใน Kodokonพอร์ตที่ใช้ฟัง URL ของฐานข้อมูล คีย์ API สิ่งเหล่านี้ล้วนไม่ควรอยู่ในซอร์สโค้ด ค่าเหล่านี้เปลี่ยนไประหว่างเครื่องของคุณกับโปรดักชัน และบางค่าคือ ข้อมูลลับ (secrets) วิธีมาตรฐานคือ ตัวแปรสภาพแวดล้อม (environment variables) ที่โหลดจากไฟล์ .env ในระหว่างการพัฒนา ติดตั้ง dotenv ด้วย npm install dotenv แล้วสร้างไฟล์ไว้ที่รากของโปรเจกต์
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=change-this-valueอิมพอร์ต dotenv/config ที่จุดเริ่มต้นสุดของไฟล์เข้าโปรแกรมของคุณ ตัวแปรในไฟล์จะถูกคัดลอกเข้าไปใน process.env นิสัยที่ดีของมืออาชีพคือ รวมการอ่านค่าไว้ในมอดูลการกำหนดค่าเพียงตัวเดียว ตรวจสอบตัวแปรตอนเริ่มทำงาน และล้มเหลวทันทีหากขาดค่าใดไป เซิร์ฟเวอร์ที่ปฏิเสธจะเริ่มทำงาน ดีกว่าเซิร์ฟเวอร์ที่ล่มตอนคำขอแรก
import "dotenv/config";
const required = ["PORT", "SESSION_SECRET"];
for (const name of required) {
if (!process.env[name]) {
throw new Error("Missing variable: " + name);
}
}
export const config = {
port: Number(process.env.PORT),
secret: process.env.SESSION_SECRET,
isProd: process.env.NODE_ENV === "production"
};ในโปรดักชันไม่มีไฟล์ .env โฮสต์จะเป็นผู้ให้ค่าจริง และ NODE_ENV จะเป็น production ใช้ config.isProd เพื่อปรับพฤติกรรม เช่น ล็อกแบบละเอียดในระหว่างการพัฒนา และข้อความแจ้งข้อผิดพลาดแบบสงวนท่าทีในโปรดักชัน อีกทั้งควรคอมมิตไฟล์ .env.example ที่แสดงรายการตัวแปรที่คาดหวังพร้อมค่าตัวอย่าง มันช่วยอธิบายการกำหนดค่าโดยไม่เปิดเผยข้อมูลลับ
import express from "express";
import { config } from "./config.js";
const app = express();
if (!config.isProd) {
console.log("Development mode");
}
app.listen(config.port, () => {
console.log("Port: " + config.port);
});.env ที่ Git เพิกเฉย.env.example มีไว้เพื่ออะไร?.gitignore