切換語言為:簡體

Node.js 建立 HTTP 伺服器

  • 爱糖宝
  • 2024-10-28
  • 2038
  • 0
  • 0

在 Node.js 中建立 HTTP 伺服器是一個基本且重要的任務。Node.js 提供了    http    模組,用於構建能夠處理 HTTP 請求和響應的伺服器。在這篇文章中,我們將透過幾個例子來展示如何使用 Node.js 建立 HTTP 伺服器。

示例 1:基本 HTTP 伺服器

下面是一個簡單的 HTTP 伺服器,它監聽 8080 埠,並對所有請求響應 "Hello, World!"。

const http = require('http');
const server = http.createServer((req, res) = >{
    res.writeHead(200, {
        'Content-Type': 'text/plain'
    });
    res.end('Hello, World!\n');
});
server.listen(8080, () = >{
    console.log('Server running at http://127.0.0.1:8080/');
});

Node.js 建立 HTTP 伺服器

示例 2:處理不同 HTTP 方法

這個例子演示瞭如何根據不同的 HTTP 方法(GET, POST, etc.)來處理請求。

const http = require('http');
const server = http.createServer((req, res) = >{
    if (req.method === 'GET') {
        res.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        res.end('Received a GET request\n');
    } else if (req.method === 'POST') {
        res.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        res.end('Received a POST request\n');
    } else {
        res.writeHead(405, {
            'Content-Type': 'text/plain'
        });
        res.end(`$ {
            req.method
        }
        is not allowed on the server\n`);
    }
});
server.listen(8080, () = >{
    console.log('Server running at http://127.0.0.1:8080/');
});

Node.js 建立 HTTP 伺服器

示例 3:解析請求 URL

在這個例子中,我們將解析請求的 URL 來提供不同的響應。

const http = require("http");
const url = require("url");
const server = http.createServer((req, res) => {
			const parsedUrl = url.parse(req.url, true);
			// 預設返回的內容  
			let content = "Page not found\n";
			let statusCode = 404;
			// 處理不同的路由  
			if (req.method === "GET") {
				res.setHeader("Content-Type", "text/html");
				// 預先設定內容型別    
				if (parsedUrl.pathname === "/") {
					content = "<h1>Home</h1>";
					statusCode = 200;
				} else if (parsedUrl.pathname === "/about") {
					content = "<h1>About</h1>";
					statusCode = 200;
				}
			} else if (req.method === "POST" && parsedUrl.pathname === "/submit") {
				let body = '';
				req.on('data', chunk => {
					body += chunk.toString();
				});
				req.on('end', () => {
					res.writeHead(200, {
						"Content-Type": "text/plain"
					});
					res.end(`Data:${body}\n`);
				});
				return; // 防止後續設定響應頭  }
				// 如果請求不是POST到/submit,寫入頭部並且結束響應  
				res.writeHead(statusCode);
				res.end(content);
			}); server.listen(8080, () => {
			console.log("伺服器執行在 http://127.0.0.1:8080/");
		});

Node.js 建立 HTTP 伺服器

示例 4:處理查詢字串

此例演示如何處理 URL 中的查詢字串引數。

const http = require('http');
const url = require('url');
const server = http.createServer((req, res) => {
	const parsedUrl = url.parse(req.url, true);
	const query = parsedUrl.query;
	res.writeHead(200, {
		'Content-Type': 'text/plain'
	});
	if (query.name) {
		res.end(`Hello, ${query.name}!\n`);
	} else {
		res.end('Hello, Stranger!\n');
	}
});
server.listen(8080, () => {
	console.log('Server running at http://127.0.0.1:8080/');
});

http://127.0.0.1:8080/?name=123

Node.js 建立 HTTP 伺服器

示例 5:靜態檔案伺服器

這個例子建立了一個簡單的靜態檔案伺服器,可以用來提供 HTML, CSS 和 JavaScript 檔案。

const http = require('http');
// 引入HTTP模組
const fs = require('fs');
// 引入檔案系統模組
const path = require('path'); // 引入路徑模組
// 建立HTTP伺服器
const server = http.createServer((req, res) => {
			// 解析請求的檔案路徑,如果請求根路徑,則返回index.html  
			let filePath = path.join(__dirname, 'public', req.url === '/' ? 'index.html' : req.url);
			// 獲取檔案的副檔名  
			let extname = path.extname(filePath);
			// 預設內容型別為text/html  
			let contentType = 'text/html';
			// 根據副檔名設定正確的內容型別  
			switch (extname) {
				case '.css':
					contentType = 'text/css';
					break;
				case '.js':
					contentType = 'text/javascript';
					break;
				case '.json':
					contentType = 'application/json';
					break;
				case '.png':
					contentType = 'image/png';
					break;
				case '.jpg':
					contentType = 'image/jpg';
					break; // 可以根據需要新增更多的內容型別  }
					// 讀取指定的檔案  
					fs.readFile(filePath, (error, content) => {
						if (error) {
							// 如果未找到檔案,返回404頁面      
							if (error.code === 'ENOENT') {
								fs.readFile(path.join(__dirname, 'public', '404.html'), (error, content) => {
									res.writeHead(404, {
										'Content-Type': 'text/html'
									});
									res.end(content, 'utf-8');
								});
							} else {
								// 處理其他錯誤,如伺服器錯誤        
								res.writeHead(500);
								res.end(`抱歉,檢查站點管理員的錯誤:${error.code} ..\n`);
							}
						} else {
							// 成功讀取檔案,返回檔案內容      
							res.writeHead(200, {
								'Content-Type': contentType
							});
							res.end(content, 'utf-8');
						}
					});
			});
		// 伺服器監聽埠 8080
		server.listen(8080, () => {
			console.log('伺服器執行在 http://127.0.0.1:8080/');
		});

建立public資料夾,再目錄下 建立檔案index.html

< !DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>hello world</h1>
</body>
</html>

在以上的例子中,我們建立了一個基本的靜態檔案伺服器,它會根據請求的檔案型別設定正確的    Content-Type    並提供檔案內容。如果請求的檔案不存在,它會返回一個 404 錯誤頁面。

透過這些例子,你應該能夠開始構建自己的 HTTP 伺服器,並根據自己的需求進行擴充套件和定製。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.