在 Node.js 中处理 HTTP 请求和响应是构建 web 应用程序的基础。以下是如何使用 Node.js 的内置 http 模块来创建一个简单的 HTTP 服务器,并处理不同类型的请求。
首先,我们将创建一个简单的 HTTP 服务器,它能够响应所有到达的请求。
JavaScriptconst 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}/`);
});

为了根据不同的请求方法(如 GET, POST)和请求的 URL 路径来提供不同的响应,我们需要解析这些信息。
JavaScriptconst 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}/`);
});

我们可以解析 GET 请求的查询参数并作出响应。
JavaScriptconst 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}/`);
});

对于 POST 请求,我们需要解析请求体中的数据。
JavaScriptconst 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}/`);
});

在上面的代码中,我们使用 StringDecoder 来将接收到的缓冲数据转换为字符串。当请求结束时,我们假设发送的是 JSON 数据,将其解析并返回。
使用 Node.js 的 http 模块来创建 HTTP 服务器并处理请求是非常直接的。通过解析请求方法、URL 和请求体,我们可以根据不同的请求来提供定制化的响应。这是构建 RESTful API 和 web 应用程序的基础。在实际的生产环境中,我们通常会使用更高级的框架(如 Express.js)来简化这一过程和增强功能。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!