编辑
2025-11-20
NodeJs
00

目录

创建一个基础的 HTTP 服务器
解析请求方法和 URL
处理 GET 请求和查询参数
处理 POST 请求和请求体
结论

在 Node.js 中处理 HTTP 请求和响应是构建 web 应用程序的基础。以下是如何使用 Node.js 的内置 http 模块来创建一个简单的 HTTP 服务器,并处理不同类型的请求。

创建一个基础的 HTTP 服务器

首先,我们将创建一个简单的 HTTP 服务器,它能够响应所有到达的请求。

JavaScript
const http = require('http'); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); }); const PORT = 3000; server.listen(PORT, () => { console.log(`服务器运行在 http://localhost:${PORT}/`); });

image.png

解析请求方法和 URL

为了根据不同的请求方法(如 GET, POST)和请求的 URL 路径来提供不同的响应,我们需要解析这些信息。

JavaScript
const http = require('http'); const url = require('url'); const server = http.createServer((req, res) => { const parsedUrl = url.parse(req.url, true); const path = parsedUrl.pathname; const trimmedPath = path.replace(/^\/+|\/+$/g, ''); const method = req.method.toUpperCase(); let responseContent = `Requested path: ${trimmedPath}\nRequested method: ${method}`; res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end(responseContent); }); const PORT = 3000; server.listen(PORT, () => { console.log(`服务器运行在 http://localhost:${PORT}/`); });

image.png

处理 GET 请求和查询参数

我们可以解析 GET 请求的查询参数并作出响应。

JavaScript
const http = require('http'); const url = require('url'); const server = http.createServer((req, res) => { if (req.method === 'GET') { const parsedUrl = url.parse(req.url, true); const query = parsedUrl.query; res.statusCode = 200; res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ message: '处理了 GET 请求', query: query })); } }); const PORT = 3000; server.listen(PORT, () => { console.log(`服务器运行在 http://localhost:${PORT}/`); });

image.png

处理 POST 请求和请求体

对于 POST 请求,我们需要解析请求体中的数据。

JavaScript
const http = require('http'); const StringDecoder = require('string_decoder').StringDecoder; // 创建HTTP服务器 const server = http.createServer((req, res) => { // 仅处理POST请求 if (req.method === 'POST') { const decoder = new StringDecoder('utf-8'); // 创建解码器实例 let buffer = ''; // 当接收到数据时,将其解码并累加到buffer中 req.on('data', (data) => { buffer += decoder.write(data); }); // 数据接收完毕,将剩余数据解码并处理 req.on('end', () => { buffer += decoder.end(); // 结束解码 const receivedData = JSON.parse(buffer); // 解析JSON数据 // 设置响应状态码和内容类型 res.statusCode = 200; res.setHeader('Content-Type', 'application/json'); // 发送响应 res.end(JSON.stringify({ message: '处理了 POST 请求', receivedData: receivedData })); }); } else { // 处理其他请求方法,如果不是POST请求返回405方法不允许 res.statusCode = 405; res.setHeader('Content-Type', 'text/plain'); res.end('Method Not Allowed'); } }); // 监听端口 const PORT = 3000; server.listen(PORT, () => { console.log(`服务器运行在 http://localhost:${PORT}/`); });

image.png

在上面的代码中,我们使用 StringDecoder 来将接收到的缓冲数据转换为字符串。当请求结束时,我们假设发送的是 JSON 数据,将其解析并返回。

结论

使用 Node.js 的 http 模块来创建 HTTP 服务器并处理请求是非常直接的。通过解析请求方法、URL 和请求体,我们可以根据不同的请求来提供定制化的响应。这是构建 RESTful API 和 web 应用程序的基础。在实际的生产环境中,我们通常会使用更高级的框架(如 Express.js)来简化这一过程和增强功能。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!