問 chatgpt 後他給我的簡單範例。(僅限本機電腦使用,沒有佈署到遠端。)
以下先存著,未來可直接查看或研究能拿來做什麼事情。
建立 my-app 資料夾,在根目錄建立下列檔案 ( 按照結構 )
my-app/
│
├── public/ # 靜態文件
│ ├── index.html # 主頁面
│ └── script.js # 客户端 JavaScript
│
├── server.js # Node.js 和 Express.js 伺服器程式碼
└── package.json # 項目配置文件(用Npm指令建立)
1. server.js (Node.js 和 Express.js 後端)
const express = require('express');
const path = require('path');
const app = express();
const PORT = 3000;
// 靜態文件
app.use(express.static(path.join(__dirname, 'public')));
// API 路由(/api/message 可以自行命名)
app.get('/api/message', (req, res) => {
res.json({ message: 'Hello from the server!' });
});
// 後端伺服器server
app.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}/`);
});
2. public/index.html (前端 HTML)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主頁面</title>
<!-- 2.或放在 head 內,但 script 內要加上 defer 延遲載入-->
<!-- <script src="./script.js"></script>-->
</head>
<body>
<h1>Hello</h1>
<button id="fetch">抓取消息</button>
<p id="message"></p>
<!-- 1. js 放在 body end 前: DOM 元素先加載,再加載 js-->
<script src="./script.js"></script>
</body>
</html>
3. public/script.js (前端 JavaScript)
document.getElementById('fetch').addEventListener('click', () => {
fetch('/api/message')
.then(response => response.json())
.then(data => {
document.getElementById('message').innerText = data.message;
})
.catch(error => {
console.error('Error fetching message:', error);
});
});
運行步驟
- 在根目錄下,打開終端機,輸入指令來初始化項目
npm init -y
下指令後,會產生 package.json 檔案。
終端機輸入指令,安裝 Express.js:
npm install express
2. 啟動伺服器:在根目錄下、打開終端機,輸入指令:
node server.js
- 特別注意檔案結構,server.js 目前是放在根目錄。
- 若 server.js 檔案路徑有異動,指令內的檔案路徑要調整。例如,根目錄新建資料夾 server,在內部存檔server.js。則要啟動伺服器的指令,變成 node server/server.js
- 以此類推
然後,終端機會顯示網址,對著牠按 Ctrl 加點擊滑鼠左鍵,開啟瀏覽器。
http://localhost:3000
,你會看到主頁面。
點按鈕,會出現文字「Hello from the server!」
說明:
- 前端文件:所有的 HTML 和 JavaScript 文件都放在 public 資料夾中,以便通過 Express 的靜態文件伺服器來進行訪問。
- 後端 API: 在 server.js 中定義的 /api/message 路由會返回一個 JSON 響應。前端通過 fetch 請求這個 API 來獲取數據。
- 分離邏輯:這樣,你的前端和後端邏輯就被清晰地分開,便於管理和擴展。
錯誤訊息:
遇到錯誤訊息Error: listen EADDRINUSE: address already in use :::3000
假如在終端機下指令 node server.js 後,出現錯誤訊息 Error: listen EADDRINUSE: address already in use :::3000。表示 port端口 3000 已被使用,須先把它移除。
指令:
netstat -ano | findstr :3000
會出現資訊, process ID (PID) 17492 正在使用 port 3000。
終止 process ID (PID) 17492 的使用。
taskkill /PID 17492 /F
再啟動 server。
node server.js