2025-07-09 Line 訂單系統-C 階段 完整 .env 範例 + db_init.sql

2025-07-09 Line 訂單系統-C 階段 完整 .env 範例 + db_init.sql

既然我們已經完成 A~C 階段的設計(Webhook → API → LINE 整合),
那接下來這份是整個系統必備的「環境變數設定檔 .env」與「初始資料庫建構檔 db_init.sql」。

這兩份檔案將成為你的 Node.js + MySQL + Vue3 + LINE Bot 系統的基礎核心設定


📦 一、.env 範例設定檔(完整註解)

📁 檔案位置:/backend/.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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# ===============================
# 🌐 Server Configuration
# ===============================
NODE_ENV=development
PORT=3000 # Node.js 伺服器埠號
BASE_URL=http://localhost:3000

# ===============================
# 🗄️ Database (MySQL)
# ===============================
DB_HOST=localhost # 資料庫主機
DB_PORT=3306 # MySQL 預設埠號
DB_USER=root # 資料庫帳號(開發用)
DB_PASSWORD=your_password_here # ⚠️請換成你自己的密碼
DB_NAME=line_order_db # 資料庫名稱

# ===============================
# 💬 LINE Messaging API
# ===============================
LINE_CHANNEL_SECRET=your_line_channel_secret_here
LINE_CHANNEL_ACCESS_TOKEN=your_line_channel_access_token_here
LINE_BOT_BASE_URL=https://api.line.me/v2/bot/message
LINE_WEBHOOK_PATH=/webhook # webhook endpoint
LINE_WEBHOOK_FULL_URL=https://your-domain.com/webhook # 部署後正式網址

# ===============================
# 🔐 JWT / Security
# ===============================
JWT_SECRET=my_jwt_secret_token
TOKEN_EXPIRE_DAYS=7

# ===============================
# 💌 Email / Notification (Optional)
# ===============================
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USER=your_email@gmail.com
MAIL_PASS=your_email_password

# ===============================
# 🧠 Cache / Redis (Optional)
# ===============================
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

# ===============================
# 🧾 Logging & Debug
# ===============================
LOG_LEVEL=debug
ENABLE_WEBHOOK_LOG=true

開發建議

  • .env 不要上傳到 GitHub(加入 .gitignore
  • 上線環境使用 .env.production
  • dotenv 套件載入設定

🗄️ 二、db_init.sql 資料庫初始化檔

📁 檔案位置:/backend/db/db_init.sql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
-- ================================================
-- 📘 LINE 線上訂單系統 - MySQL 資料庫初始化
-- ================================================

CREATE DATABASE IF NOT EXISTS line_order_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

USE line_order_db;

-- =============================
-- 🧍‍♀️ 使用者 (LINE User)
-- =============================
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
line_user_id VARCHAR(100) NOT NULL UNIQUE,
display_name VARCHAR(100),
phone VARCHAR(30),
email VARCHAR(100),
joined_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- =============================
-- 🛍️ 商品 (Product)
-- =============================
CREATE TABLE IF NOT EXISTS products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
stock INT DEFAULT 0,
category VARCHAR(50),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- =============================
-- 🧾 訂單 (Order)
-- =============================
CREATE TABLE IF NOT EXISTS orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
total_price DECIMAL(10,2) NOT NULL,
status ENUM('pending','paid','cancelled','completed') DEFAULT 'pending',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);

-- =============================
-- 📦 訂單明細 (Order Items)
-- =============================
CREATE TABLE IF NOT EXISTS order_items (
id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT DEFAULT 1,
price DECIMAL(10,2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);

-- =============================
-- 💬 訊息記錄 (LINE Message Log)
-- =============================
CREATE TABLE IF NOT EXISTS message_log (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
message_text TEXT,
message_type VARCHAR(30),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);

-- =============================
-- 🔑 測試資料(選擇性)
-- =============================
INSERT INTO products (name, description, price, stock, category)
VALUES
('拿鐵咖啡', '香濃順口的拿鐵', 80.00, 20, '飲品'),
('美式咖啡', '無糖美式,清爽提神', 60.00, 30, '飲品'),
('抹茶蛋糕', '抹茶控必吃', 120.00, 10, '甜點');

🧭 三、初始化與測試步驟

🧰 Step 1. 建立 .env

backend 目錄新增 .env,貼上上述內容並修改:

1
2
DB_USER=root
DB_PASSWORD=你的MySQL密碼

🧰 Step 2. 匯入資料庫

打開終端機(或 MySQL Workbench):

1
mysql -u root -p < db/db_init.sql

檢查:

1
2
3
SHOW DATABASES;
USE line_order_db;
SHOW TABLES;

🧰 Step 3. 啟動伺服器

backend 目錄執行:

1
2
npm install
npm run dev

🧰 Step 4. 驗證 LINE Webhook

.env 內的 LINE_WEBHOOK_FULL_URL 填入 LINE Developer 設定中。
再發一則訊息測試 → 終端應顯示「Webhook received」。


如果你願意,我可以幫你生成:

backend/config.js
backend/db.js(讀取 .env 並連線 MySQL)
backend/routes/orderRoutes.js
這三個檔案構成你的 Node.js + MySQL 基礎骨架
可以直接與 .envdb_init.sql 搭配使用。

是否要我現在幫你生成這三個檔案?