Node.js基于http模块搭建简易HTTP服务及参数处理
本文详解如何使用Node.js原生http模块搭建简易HTTP服务。内容涵盖服务器创建、监听端口、处理不同请求路径,以及解析查询字符串和JSON请求体。同时介绍了服务端设置Cookie与响应头,解决跨域带凭据请求的配置方法,适合初学者快速掌握基础网络编程。
本文仅基于Node.js内置的http模块,演示如何构建一个基础的HTTP服务。
该服务主要涵盖以下核心功能:
- 接收并响应客户端发起的请求。
- 根据访问地址的不同,返回相应的内容信息。
- 解析客户端传递的请求体(如JSON字符串)及查询字符串参数。
- 实现服务端设置Cookie以及读取客户端发送的Cookie数据。
基础HTTP服务搭建
核心逻辑依赖于http模块提供的createServer方法创建服务实例,以及listen方法启动监听。具体实现代码如下:
const http = require('http');
// 初始化http服务
const server = http.createServer();
// 启动 HTTP 服务监听连接
server.listen(8000, () => {
console.log('service run: http://127.0.0.1:8000');
});
// 侦听请求事件
server.on('request', (req, res) => {
try {
// 设置响应头允许跨域
res.setHeader('Access-Control-Allow-Origin', '*');
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('HTTP服务搭建成功');
} catch (ex) {
console.error(ex.message);
res.statusCode = 500;
res.end('service error');
}
});上述代码完成了基础HTTP服务的搭建,目前仅能返回固定文本,且未针对请求路径和参数进行差异化处理。接下来,我们将重点解决请求地址的识别与响应问题。
基于请求地址的差异化响应
每当客户端发起新请求,服务器会触发request事件。该事件的回调函数接收两个关键对象:request对象包含详细的请求信息,response对象用于构建返回给客户端的响应。我们可以通过request对象的url属性提取请求地址,实现代码如下:
const http = require('http');
const server = http.createServer();
server.listen(8000, () => {
console.log('service run: http://127.0.0.1:8000');
});
server.on('request', (req, res) => {
try {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', 'application/json');
// 获取请求地址
const urls = req.url.split('?');
const requestAddress = urls[0];
console.log(`请求地址:${ requestAddress }`);
const callback = {
'/test': () => {
res.statusCode = 200;
res.end(JSON.stringify({text: '通过测试'}));
},
'/': () => {
res.statusCode = 200;
res.end(JSON.stringify({text: 'hello world'}));
}
}
if (callback[requestAddress] instanceof Function) {
return callback[requestAddress]()
}
res.writeHead(200, '响应成功');
res.end('成功收到请求');
} catch (ex) {
console.error(ex.message);
res.statusCode = 500;
res.end('service error');
}
});上述代码实现了根据请求地址返回不同内容的功能,但尚未涉及请求体参数和查询字符串的解析。接下来,我们将补充获取请求参数的相关代码。
请求参数解析
查询字符串信息可从request对象的url属性中提取,而请求体参数则需要通过监听request对象的data事件来获取。具体实现如下:
const http = require('http');
const server = http.createServer();
server.listen(8000, () => {
console.log('service run: http://127.0.0.1:8000');
});
server.on('request', (req, res) => {
try {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Content-Type', 'application/json');
const urls = req.url.split('?');
const requestAddress = urls[0];
console.log(`请求地址:${ requestAddress }`);
const callback = {
'/test': () => {
console.log(`查询字符串:${urls[1]}`);
if (req.method === 'POST') {
// post请求,获取json格式的请求体参数
let data = '';
// req对象是一个流(参考Stream API),可以监听它的data事件来获取数据块。
req.on('data', (chunk) => {
// 这里假设收到的数据是字符串,隐式转换:二进制数据 => 字符串
data += chunk;
});
// 在获取数据结束时,调用end事件
req.on('end', () => {
data = JSON.parse(data);
console.log('请求体:', data);
});
}
res.statusCode = 200;
res.end(JSON.stringify({text: '通过测试'}));
},
'/': () => {
console.log(`查询字符串:${urls[1]}`);
res.statusCode = 200;
res.end(JSON.stringify({text: 'hello world'}));
}
}
if (callback[requestAddress] instanceof Function) {
return callback[requestAddress]()
}
res.writeHead(200, '响应成功');
res.end('成功收到请求');
} catch (ex) {
console.error(ex.message);
res.statusCode = 500;
res.end('service error');
}
});通过上述代码,我们成功实现了从请求体中解析JSON格式数据以及提取查询字符串参数的功能。
服务端Cookie设置与跨域处理
若服务器需支持跨域带凭据的请求,必须将响应头Access-Control-Allow-Credentials设置为true,且Access-Control-Allow-Origin不能为通配符'*',必须指定具体的域名。在前端,若要允许跨域发送凭据至服务器,需将XMLHttpRequest对象的withCredentials属性设置为true。
const http = require('http');
const server = http.createServer();
server.listen(8000, () => {
console.log('service run: http://127.0.0.1:8000');
});
server.on('request', (req, res) => {
try {
// 跨域允许携带凭据(cookie之类)
res.setHeader('Access-Control-Allow-Credentials', 'true');
// 要允许跨域携带cookie,必须设置为具体的域,不能是‘*'
res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');
res.setHeader('Content-Type', 'application/json');
const requestAddress = req.url.split('?')[0];
const callback = {
'/login': () => {
// 设置cookie
res.setHeader('Set-Cookie', 'name=wst;age=24;Max-Age=666;');
res.statusCode = 200;
// 返回json格式数据到客户端
res.end(JSON.stringify({text: '登录成功'}));
},
'/': () => {
// 通过req.headers.cookie读取cookie
console.log(req.headers.cookie)
res.statusCode = 200;
res.end(JSON.stringify({text: 'hello world'}));
}
}
if (callback[requestAddress] instanceof Function) {
return callback[requestAddress]()
}
res.writeHead(200, '响应成功');
res.end('成功收到请求');
} catch (ex) {
console.error(ex.message);
res.statusCode = 500;
res.end('service error');
}
});至此,一个具备基础请求处理、参数解析及Cookie管理功能的HTTP服务已搭建完成。如需了解更多Node.js搭建HTTP服务的相关内容,可查阅本站往期文章或继续浏览后续教程,感谢大家的支持!
在 NestJS 中使用管道验证数据与守卫控制访问权限
2026-11-05 12:43:41
Node.js后端生成高强度随机字符串的方法
2026-11-04 16:29:54
Node.js环境中怎么使用axios或http模块发送GET请求
2026-11-03 21:57:15
Node.js环境下怎么实现JS反混淆自动化?常用库与CLI工具推荐
2026-11-03 21:15:54
解决JS逆向常见报错:缺少DOM环境导致代码运行失败
2026-11-03 20:41:59
