使用 ServBay 建立並執行 Express.js 專案
什麼是 Express.js?
Express.js 是一個基於 Node.js 的快速、開放且極簡的 Web 應用框架。它提供一系列強大功能,適用於打造單頁、多頁或混合型 Web 應用。Express.js 為 Node.js 生態圈中最受歡迎的框架之一,因其簡潔且彈性的設計而廣受開發者推崇。
Express.js 的主要特性與優勢
- 簡潔且彈性高:Express.js 擁有簡明的 API 和靈活的中介軟體機制,讓 Web 應用開發極為高效。
- 中介軟體:支援多種中介功能,可輕鬆處理請求與回應,例如解析請求主體、會話處理、靜態檔案服務等。
- 路由管理:強大的路由系統,能根據不同 HTTP 方法(GET、POST、PUT、DELETE 等)及 URL 路徑處理請求。
- 高度整合性:可無縫整合各種模板引擎(如 Pug, EJS, Handlebars)、資料庫(如 MongoDB, MySQL, PostgreSQL)及其他 Node.js 模組。
- 活躍社群與豐富生態:有龐大社群支援及大量第三方中介軟體和插件,遇到問題容易取得解決方案和資源。
運用 Express.js,開發者能迅速建構高效能 Web 應用及 API。ServBay 做為一款功能強大的本地 Web 開發環境,不僅為 Express.js 專案提供便利的 Node.js 執行環境,也提供強大的網站(反向代理)以及資料庫管理功能。
使用 ServBay 建立並運行 Express.js 專案
本篇將引導你利用 ServBay 所提供的 Node.js 環境建立、設定並執行一個 Express.js 專案。我們將運用 ServBay 的網站功能來設定 Web 伺服器,並透過反向代理存取應用。這種方式特別適合於 Node.js、Python、Go、Java 等需執行於特定埠口之服務的應用程式。
前置條件
在開始前,請確保符合以下條件:
- 已於 macOS 安裝好 ServBay。
- 已於 ServBay 中安裝並啟用 Node.js 套件。可於 ServBay 控制面板「套件」頁籤管理。
- (可選)若需連接資料庫,請確定已於 ServBay 安裝並啟動所需的資料庫套件(如 MariaDB、PostgreSQL、MongoDB、Redis、MySQL)。
- 具備基本終端機或命令列操作能力。
創建 Express.js 專案
初始化專案
首先,打開終端機,切換至 ServBay 建議的網站根目錄
/Applications/ServBay/www
,再以npx express-generator
快速生成 Express.js 專案骨架。npx
是 npm v5.2+ 內建之工具,用於執行 Node.js 套件的可執行檔。bashcd /Applications/ServBay/www npx express-generator servbay-express-app
1
2執行後會於
/Applications/ServBay/www
目錄下建立一名為servbay-express-app
的新資料夾,並含有基本 Express.js 專案結構。安裝專案依賴套件
進入新建的
servbay-express-app
,用npm install
安裝所需依賴(包含 Express.js 本身、模板引擎、靜態檔案服務等)。bashcd servbay-express-app npm install
1
2等待安裝完成。
修改 Express.js 專案輸出內容
為驗證專案能正確運行,以下將修改預設首頁內容。
編輯
routes/index.js
檔案Express.js 專案常用路由檔案處理不同 URL 請求。開啟專案下的
routes/index.js
,該檔負責/
路徑的 GET 請求。將代碼修改成直接回傳純文字回應,不再渲染預設 Pug 模板。javascriptvar express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { // 修改為傳送純文字回應 res.send('Hello ServBay!'); }); module.exports = router;
1
2
3
4
5
6
7
8
9
10儲存檔案。
進入開發模式
開發時,我們通常會啟動本地開發伺服器,方便即時檢視修改結果。Express.js 可藉 npm start
啟用內建 HTTP 伺服器。
啟動開發伺服器
於
servbay-express-app
專案根目錄下,執行下列指令啟動開發伺服器。可經由指定PORT
環境變數(此範例為8585
),DEBUG
變數則可啟用額外除錯資訊。bashcd /Applications/ServBay/www/servbay-express-app PORT=8585 DEBUG=servbay-express-app:* npm start
1
2終端機顯示啟動資訊即表示 Express.js 應用已監聽
8585
埠口。設定 ServBay 網站反向代理
由於 Express.js 應用運作於非標準 Web 埠(非 80/443),因此需利用 ServBay 的網站功能設定反向代理。ServBay 內建 Web 伺服器(預設為 Caddy)會監聽 80/443,再將特定網域請求導向
127.0.0.1:8585
。開啟 ServBay 控制面板,切至「網站」頁籤並新增網站。設定如下:
- 名稱:
My first Express.js dev site
(方便辨識) - 網域:
servbay-express-test.servbay.demo
(建議使用.servbay.demo
以自動取得 HTTPS) - 網站型態:選擇
反向代理
- IP:
127.0.0.1
(或localhost
) - 埠口:
8585
(Express.js 應用執行埠)
儲存並套用後,ServBay 自動設定 Web 伺服器及簽發 SSL 憑證(針對
.servbay.demo
)。詳細設定參閱 ServBay 文件:新增 Node.js 開發網站。
- 名稱:
存取開發模式網站
開啟瀏覽器,進入指定的網域
https://servbay-express-test.servbay.demo
。Web 伺服器會接收請求並透過反向代理傳遞至 8585 埠的 Express.js 應用,您應該會看到顯示 "Hello ServBay!" 的畫面。ServBay 支援自訂網域與免費 SSL 憑證(含
.servbay.demo
網域自動 HTTPS),讓你在本地也輕鬆體驗類生產環境的 HTTPS,加速問題發現與驗證。
部署生產版本
專案完成後,可模擬生產環境進行最終上線前的測試。
準備生產環境
Express.js 生產環境通常需設
NODE_ENV
為production
,這會影響部分套件行為,如關閉除錯、最佳化效能等,請確保專案能正確響應此設定。啟動生產模式伺服器
於專案根目錄執行以下指令,將伺服器執行於生產模式(此例使用
8586
埠區隔開發與生產):bashcd /Applications/ServBay/www/servbay-express-app PORT=8586 NODE_ENV=production npm start
1
2終端機會顯示伺服器於
8586
埠監聽。設定 ServBay 生產反向代理網站
如同開發模式,於 ServBay 新增一個反向代理網站:
- 名稱:
My first Express.js production site
- 網域:
servbay-express-test-prod.servbay.demo
(或其他適用生產模擬的網域) - 網站型態:選擇
反向代理
- IP:
127.0.0.1
- 埠口:
8586
(生產模式執行埠)
儲存並套用設定。
- 名稱:
存取生產模式網站
開啟瀏覽器,前往
https://servbay-express-test-prod.servbay.demo
,即透過 ServBay 反向代理進入8586
的生產實例,可於本地完整測試生產環境配置。
資料庫連線
ServBay 支援多種主流本地資料庫套件如 MariaDB、PostgreSQL、MongoDB 及 Redis。開啟這些套件後,Express.js 專案即可便捷串接。預設用戶與密碼(MariaDB/MySQL 之 root 密碼為 password
,PostgreSQL 預設用戶名 user
,密碼 password
,預設資料庫為 servbay_default
),可依 ServBay 介面指示或預設值連線。
以下範例示範如何於 Express.js 專案中連接這些資料庫。請先使用 npm install <套件名稱>
安裝 Node.js 資料庫驅動。
連線 MongoDB
先於專案中安裝
mongoose
驅動(流行 ORM):bashnpm install mongoose
1接著於程式(如
app.js
或獨立設定檔)中引入並連線:javascriptvar mongoose = require('mongoose'); // 連接本地 MongoDB,資料庫名稱 servbay-express-app // ServBay 預設 MongoDB 無需密碼 mongoose.connect('mongodb://localhost/servbay-express-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('已連線至 MongoDB')) .catch(err => console.error('MongoDB 連線錯誤:', err));
1
2
3
4
5
6
7
8
9
10請確保 ServBay 的 MongoDB 套件已啟動。
連線 Redis
先安裝 Redis 客戶端
redis
:bashnpm install redis
1於程式中引入並連線:
javascriptvar redis = require('redis'); // ServBay 預設 Redis 運作於 localhost:6379,無密碼 var client = redis.createClient({ host: 'localhost', port: 6379 }); client.on('connect', function() { console.log('已連線至 Redis'); }); client.on('error', function (err) { console.log('Redis 錯誤: ' + err); }); // 範例:設定與取得資料 // client.set('mykey', 'Hello from Express!', redis.print); // client.get('mykey', function(err, reply) { // if (err) throw err; // console.log(reply); // 顯示 "Hello from Express!" // }); // 使用 client 執行 Redis 操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23請確保 ServBay 的 Redis 套件已啟動。
連線 MariaDB / MySQL
ServBay 支援 MariaDB 與 MySQL。通常採用
mariadb
或mysql2
套件。以mariadb
為例(也可用於連接 MySQL)。先安裝
mariadb
或mysql2
:bashnpm install mariadb # 或 npm install mysql2
1之後使用 ServBay 預設帳號密碼連線(root 密碼為
password
)。javascriptvar mariadb = require('mariadb'); // ServBay 預設 MariaDB/MySQL 執行於 localhost:3306 var pool = mariadb.createPool({ host: 'localhost', port: 3306, // 預設埠 user: 'root', // ServBay 預設用戶 password: 'password', // 預設密碼 database: 'servbay_express_app', // 可於 ServBay 內建立該資料庫 connectionLimit: 5 // 連線池規模 }); pool.getConnection() .then(conn => { console.log("已連線至 MariaDB/MySQL"); // conn 可用來執行查詢 // conn.query("SELECT 1").then(...).catch(...).finally(() => conn.release()); conn.release(); // 使用完畢請釋放連線 }) .catch(err => { console.log("連線失敗,錯誤原因: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21連線前請先於資料庫管理工具(如 phpMyAdmin, Adminer,皆可透過 ServBay 進入)建立
servbay_express_app
資料庫,並確認 MariaDB 或 MySQL 套件已開啟。連線 PostgreSQL
先安裝
pg
客戶端套件:bashnpm install pg
1接著依服務預設憑證連線(PostgreSQL 預設用戶
user
,密碼password
,資料庫servbay_default
)。javascriptvar { Pool } = require('pg'); // ServBay 預設 PostgreSQL 執行於 localhost:5432 var pool = new Pool({ user: 'user', // ServBay 預設用戶 host: 'localhost', database: 'servbay_default', // 預設資料庫,或自行建立 password: 'password', // 預設密碼 port: 5432, // 預設埠 }); pool.connect((err, client, done) => { if (err) { console.error('PostgreSQL 連線錯誤:', err); return; } console.log('已連線至 PostgreSQL'); // client 可執行查詢 // client.query('SELECT NOW()', (err, res) => { ... done(); }); done(); // 回收連線 }); // 或以 async/await 用法 // try { // const client = await pool.connect(); // console.log('已連線至 PostgreSQL'); // // const res = await client.query('SELECT NOW()'); // // console.log(res.rows[0]); // client.release(); // } catch (err) { // console.error('PostgreSQL 連線錯誤:', err); // }
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請確認 ServBay PostgreSQL 套件已啟動。
總結
經過上述步驟,您已成功利用 ServBay 建立、設定並運行一個 Express.js 專案,並學會:
- 利用
express-generator
初始化專案。 - 於指定埠口執行 Express.js 應用。
- 配置 ServBay 網站反向代理,於標準 HTTP/S 埠存取 Node.js 應用。
- 於 ServBay 環境串接各類主流資料庫。
ServBay 大幅簡化本地 Node.js (Express.js) 開發環境的建立與管理,讓專注於程式開發成為可能。同時,ServBay 還提供自動 SSL 憑證、網站備份、日誌檢視等多種便利功能,提升您的本地開發體驗。