使用 Node.js 建立簡易伺服器並解決 CORS 問題

更新於 發佈於 閱讀時間約 7 分鐘

在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。


什麼是 CORS?

CORS(Cross-Origin Resource Sharing)是一種安全機制,當瀏覽器發送 AJAX 請求到不同來源的伺服器時,瀏覽器會檢查伺服器是否允許這種跨來源的請求。如果伺服器沒有正確設置 CORS,請求將被瀏覽器阻止,導致伺服器無法收到資料。

1. 初始化專案並安裝必要套件

首先,我們需要初始化一個新的 Node.js 專案,並安裝 expresscors 套件。

  1. 打開終端機,執行以下命令來初始化專案:
    npm init -y
    這會建立一個 package.json 檔案,並設定一些預設的專案設定。
  2. 安裝 expresscors 套件:
    npm install express cors
    express 是一個輕量的 Node.js web 應用程式框架,而 cors 套件可以幫助我們輕鬆地處理 CORS 問題。

2. 建立伺服器端程式碼並啟用 CORS

接下來,我們會建立一個名為 server.js 的檔案,並添加伺服器端程式碼。這個程式會建立一個簡單的伺服器,並處理 CORS。

  1. 建立 server.js 檔案,並添加以下內容:
    const express = require('express');
    const cors = require('cors'); // 引入 cors 套件
    const app = express();
    const port = 3000;

    app.use(express.json());
    app.use(cors()); // 啟用 CORS

    // 簡單的 GET 路由
    app.get('/', (req, res) => {
    res.send('Hello, World!');
    });

    // POST 路由來接收資料
    app.post('/data', (req, res) => {
    const receivedData = req.body;
    console.log('Received data:', receivedData);
    res.send('Data received');
    });

    app.listen(port, () => {
    console.log(`Server is running on http://localhost:${port}`);
    });
    在這段程式碼中,我們引入了 cors 套件,並通過 app.use(cors()) 啟用了 CORS 支援,這樣伺服器便允許任何來源發送請求。

3. 建立使用者端 HTML 檔案

接下來,我們會建立一個簡單的 HTML 檔案,包含一個表單來發送資料到伺服器。

  1. 建立 client.html 檔案,並添加以下內容:
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Client</title>
    </head>
    <body>
    <h1>Send Data to Server</h1>
    <form id="dataForm">
    <label for="data">Data:</label>
    <input type="text" id="data" name="data" required>
    <button type="submit">Send</button>
    </form>

    <script>
    document.getElementById('dataForm').addEventListener('submit', function(event) {
    event.preventDefault();
    const data = { data: document.getElementById('data').value };

    fetch('http://localhost:3000/data', {
    method: 'POST',
    headers: {
    'Content-Type': 'application/json',
    },
    body: JSON.stringify(data),
    })
    .then(response => response.text())
    .then(responseText => {
    alert('Response from server: ' + responseText);
    })
    .catch(error => {
    console.error('Error:', error);
    });
    });
    </script>
    </body>
    </html>
    在這個 HTML 檔案中,我們建立了一個包含輸入框和提交按鈕的表單。使用 JavaScript 來攔截表單的提交,並使用 fetch 函式將資料發送到伺服器。

4. 啟動伺服器

現在,我們可以啟動伺服器。在終端機中運行以下命令:

node server.js

您應該會看到以下訊息,表示伺服器已成功啟動:

Server is running on http://localhost:3000

5. 測試發送資料

打開瀏覽器,開啟 client.html 檔案。填寫表單並提交,這次應該不會再遇到 CORS 問題,伺服器將能夠成功接收資料,並在終端機中打印收到的資料。

總結

通過這篇教學,我們學習了如何使用 Node.js 建立簡易伺服器,並解決 CORS 問題。當我們希望伺服器接收來自不同來源的請求時,處理 CORS 是必不可少的步驟。希望這篇文章能幫助您順利解決在開發過程中遇到的 CORS 問題。如果有任何問題,歡迎隨時提出。

留言
avatar-img
留言分享你的想法!
avatar-img
程式輕鬆玩
73會員
184內容數
這裡將以輕鬆風格,深入探討程式設計的基礎和高級概念。從程式語言到演算法,我們將以易懂的方式解釋每個主題,讓你輕鬆掌握。無論你是初學者或有經驗者,都能在這裡找到適合你的內容。無論你的目標是成為專業開發者還是擴展知識,我們都會陪伴你一同成長!
程式輕鬆玩的其他內容
2025/04/20
本週科技圈掀起多項重磅消息:OpenAI於4月14日釋出GPT‑4.1系列模型,進一步強化編碼與長文理解能力 Reuters;Chipolo推出POP藍牙追蹤器,同時支援Apple與Google尋找網路 The Verge;南韓新創RLWRLD完成1,480萬美元募資,將打造專屬機器人基礎模型
Thumbnail
2025/04/20
本週科技圈掀起多項重磅消息:OpenAI於4月14日釋出GPT‑4.1系列模型,進一步強化編碼與長文理解能力 Reuters;Chipolo推出POP藍牙追蹤器,同時支援Apple與Google尋找網路 The Verge;南韓新創RLWRLD完成1,480萬美元募資,將打造專屬機器人基礎模型
Thumbnail
2025/04/20
本週遊戲動態涵蓋經典 25 週年重返 PC 平台、回合制策略新作重燃星戰熱潮、Remedy 荒誕合擊新作搶先曝光、Game Pass 下架名單震撼登場,以及 Steam 獨立新秀推薦不容錯過 PC GamerWindows Central。
Thumbnail
2025/04/20
本週遊戲動態涵蓋經典 25 週年重返 PC 平台、回合制策略新作重燃星戰熱潮、Remedy 荒誕合擊新作搶先曝光、Game Pass 下架名單震撼登場,以及 Steam 獨立新秀推薦不容錯過 PC GamerWindows Central。
Thumbnail
2025/04/08
近來因為川普政府啟動全新一輪對等關稅政策,全球貿易風暴席捲而來,而台灣面臨的衝擊更是不容小覷。美方以台灣過去對美出口關稅達64%為依據,採取「對等關稅」原則回敬徵收32%關稅,這一舉措不僅使得國際市場恐慌連連,台股也出現劇烈下跌,吸引了各界關注。
Thumbnail
2025/04/08
近來因為川普政府啟動全新一輪對等關稅政策,全球貿易風暴席捲而來,而台灣面臨的衝擊更是不容小覷。美方以台灣過去對美出口關稅達64%為依據,採取「對等關稅」原則回敬徵收32%關稅,這一舉措不僅使得國際市場恐慌連連,台股也出現劇烈下跌,吸引了各界關注。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
Thumbnail
Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
Thumbnail
AWS CloudFront + S3 遇到 CORS 解決方式
Thumbnail
AWS CloudFront + S3 遇到 CORS 解決方式
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
HTTP伺服器端 package main import ( "net/http" ) type Refer struct { handler http.Handler refer string } //實現中介軟體邏輯​ func (this *Refer) ServeHTTP(
Thumbnail
HTTP伺服器端 package main import ( "net/http" ) type Refer struct { handler http.Handler refer string } //實現中介軟體邏輯​ func (this *Refer) ServeHTTP(
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News