当前位置: 首页 > news >正文

升阳广州做网站公司好看的论坛源码

升阳广州做网站公司,好看的论坛源码,天津快速建站模板,关于网站建设中原创文章的一些想法Node.js 的 http 模块是构建 Web 服务器和客户端的基础核心模块,它提供了创建 HTTP 服务器和发起 HTTP 请求的能力。 1. 核心功能 创建 HTTP 服务器:监听端口,处理客户端请求(如浏览器访问)。发起 HTTP 请求&#xff…

Node.js 的 http 模块是构建 Web 服务器和客户端的基础核心模块,它提供了创建 HTTP 服务器和发起 HTTP 请求的能力。


1. 核心功能

  • 创建 HTTP 服务器:监听端口,处理客户端请求(如浏览器访问)。
  • 发起 HTTP 请求:作为客户端向其他服务器发送请求(类似 fetch 或 axios 的底层实现)。
  • 处理 HTTP 协议:支持 HTTP/1.1 和部分 HTTP/2 功能(需结合 http2 模块)。

2. 创建 HTTP 服务器

使用 http.createServer() 方法创建服务器,传入一个回调函数处理请求和响应。

const http = require('http');// 创建服务器
const server = http.createServer((req, res) => {// req: 请求对象(包含客户端信息)// res: 响应对象(用于向客户端返回数据)// 设置响应头res.writeHead(200, { 'Content-Type': 'text/plain' });// 发送响应内容res.end('Hello, World!\n');
});// 监听端口
server.listen(3000, () => {console.log('Server running at http://localhost:3000/');
});
  • req 对象:包含请求方法(GET/POST)、URL、头部、Body 等信息。
  • res 对象:用于设置状态码、头部、发送响应内容(end() 结束响应)。

3. 请求对象 (req) 的常用属性和方法

属性/方法说明
req.method请求方法(如 'GET''POST')。
req.url请求的 URL 路径(不包含域名和查询参数)。
req.headers请求头对象(如 { 'user-agent': 'Chrome' })。
req.on('data')监听数据块(用于处理 POST 请求的 Body)。
req.on('end')数据接收完毕时触发。
req.url解析 URL 可使用 url 模块(如 require('url').parse(req.url))。

处理 POST 请求示例

const http = require('http');const server = http.createServer((req, res) => {if (req.method === 'POST') {let body = '';req.on('data', chunk => {body += chunk.toString(); // 拼接数据块});req.on('end', () => {console.log('Received:', body);res.end('Data received');});} else {res.end('Send a POST request');}
});server.listen(3000);

4. 响应对象 (res) 的常用方法

方法说明
res.writeHead()设置状态码和响应头(如 200 和 Content-Type)。
res.write()发送部分响应内容(可多次调用)。
res.end()结束响应(可附带最后的数据)。
res.statusCode直接设置状态码(如 res.statusCode = 404)。

 (1) URL 解析

使用 url 模块解析请求 URL:

const url = require('url');
const parsedUrl = url.parse(req.url);
console.log('Path:', parsedUrl.pathname);
console.log('Query:', parsedUrl.query); // 如 ?name=foo&age=20

(2) 路由处理

手动实现简单路由:

const server = http.createServer((req, res) => {const { pathname } = url.parse(req.url);if (pathname === '/') {res.end('Home Page');} else if (pathname === '/about') {res.end('About Page');} else {res.statusCode = 404;res.end('Not Found');}
});

(3) HTTP 状态码

常用状态码:

  • 200:成功
  • 404:未找到
  • 500:服务器错误

设置状态码:

res.statusCode = 404;
res.end('Not Found');
const http = require('http');
const url = require('url');
const querystring = require('querystring');// 模拟数据库数据
const users = [{ id: 1, name: 'Alice' },{ id: 2, name: 'Bob' },{ id: 3, name: 'Charlie' }
];const server = http.createServer((req, res) => {// 解析 URL 和查询参数const parsedUrl = url.parse(req.url, true);const path = parsedUrl.pathname.replace(/^\/+|\/+$/g, ''); // 去除首尾斜杠const query = parsedUrl.query;// 设置 CORS 头,允许跨域请求res.setHeader('Access-Control-Allow-Origin', '*');res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');res.setHeader('Access-Control-Allow-Headers', 'Content-Type');// 处理 OPTIONS 请求(预检请求)if (req.method === 'OPTIONS') {res.writeHead(200);res.end();return;}// 路由处理if (path === 'users') {switch (req.method) {case 'GET':// 获取用户列表或单个用户if (query.id) {const user = users.find(u => u.id === parseInt(query.id));if (user) {res.writeHead(200, { 'Content-Type': 'application/json' });res.end(JSON.stringify(user));} else {res.writeHead(404, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'User not found' }));}} else {res.writeHead(200, { 'Content-Type': 'application/json' });res.end(JSON.stringify(users));}break;case 'POST':// 创建新用户let body = '';req.on('data', (chunk) => {body += chunk;});req.on('end', () => {try {const newUser = JSON.parse(body);newUser.id = users.length + 1;users.push(newUser);res.writeHead(201, { 'Content-Type': 'application/json' });res.end(JSON.stringify(newUser));} catch (error) {res.writeHead(400, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'Invalid request body' }));}});break;case 'PUT':// 更新用户if (!query.id) {res.writeHead(400, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'Missing user ID' }));return;}let updateBody = '';req.on('data', (chunk) => {updateBody += chunk;});req.on('end', () => {try {const updatedData = JSON.parse(updateBody);const index = users.findIndex(u => u.id === parseInt(query.id));if (index !== -1) {users[index] = { ...users[index], ...updatedData };res.writeHead(200, { 'Content-Type': 'application/json' });res.end(JSON.stringify(users[index]));} else {res.writeHead(404, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'User not found' }));}} catch (error) {res.writeHead(400, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'Invalid request body' }));}});break;case 'DELETE':// 删除用户if (!query.id) {res.writeHead(400, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'Missing user ID' }));return;}const index = users.findIndex(u => u.id === parseInt(query.id));if (index !== -1) {const deletedUser = users.splice(index, 1)[0];res.writeHead(200, { 'Content-Type': 'application/json' });res.end(JSON.stringify(deletedUser));} else {res.writeHead(404, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'User not found' }));}break;default:res.writeHead(405, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'Method not allowed' }));}} else {// 未知路由res.writeHead(404, { 'Content-Type': 'application/json' });res.end(JSON.stringify({ error: 'Route not found' }));}
});// 启动服务器
server.listen(3000, () => {console.log('API 服务器已启动,监听端口 3000');
});

5. 发起 HTTP 请求(客户端)

使用 http.request() 方法向其他服务器发送请求。

基本示例

const http = require('http');const options = {hostname: 'example.com',port: 80,path: '/',method: 'GET'
};const req = http.request(options, (res) => {console.log(`Status Code: ${res.statusCode}`);let data = '';res.on('data', (chunk) => {data += chunk;});res.on('end', () => {console.log('Response:', data);});
});req.on('error', (e) => {console.error('Request failed:', e);
});req.end(); // 必须调用 end() 发送请求

简化版(使用 http.get

const http = require('http');http.get('http://example.com', (res) => {let data = '';res.on('data', (chunk) => {data += chunk;});res.on('end', () => {console.log('Response:', data);});
});


6. 与 https 模块的区别

  • http:明文传输(不加密)。
  • https:基于 TLS/SSL 加密(需配置证书)。

创建 HTTPS 服务器:

const https = require('https');
const fs = require('fs');const options = {key: fs.readFileSync('server.key'),cert: fs.readFileSync('server.crt')
};https.createServer(options, (req, res) => {res.end('Secure Server');
}).listen(443);

.注意事项

  • 性能问题http 模块是底层 API,高并发场景建议使用 Express 或 Fastify
  • 错误处理:必须监听 error 事件(如网络错误)。
  • Body 解析:POST 请求的 Body 需要手动拼接(生产环境可用 body-parser 或类似中间件)。

总结

  • 服务器端http.createServer() + req/res 处理请求。
  • 客户端http.request() 或 http.get() 发起请求。
  • 扩展性:结合 urlquerystring 等模块实现更复杂功能。
http://www.dtcms.com/a/455828.html

相关文章:

  • 物流的网站模板免费下载微网站 一键拨号
  • php做网站难么国内免费视频素材无水印素材网站
  • 有凡客模版怎么建设网站做钓鱼网站会被抓吗
  • 中国网站设计模板下载兰州西固区公司网站建设
  • 免费网站代码大全免费网站托管平台
  • 四川城乡住房城乡建设厅网站网站整体色调
  • 梧州网站优化价格做网站都需要租服务器吗
  • 政务网站建设相关文件工程装修
  • 局域网手动vxlan集中式网关整体配置方案
  • 如何访问服务器上的网站苏州免费网站制作
  • 沧州外贸网站建设青岛 茶叶网站建设
  • 国外优秀的平面设计网站云南省建设厅网站查询
  • 在哪里找做网站的客户食品网站网页设计
  • 常州公诚建设项目管理有限公司官方网站佛山网络科技公司有哪些
  • 湖南网站推广建设公司网站注销备案
  • 哪个网站做新中式技术研发流程的六个阶段
  • 开源快速网站搭建平台山东港基建设集团网站
  • 网站优化 书wordpress能建什么网站
  • 毕设DW做网站的过程妇幼保健院人流价格表
  • 浙江省城乡住房建设厅网站信息中心完成网站建设
  • 做网站卖高仿什么是网站建设技术
  • 建设论坛网站自学上海工程建设咨询有限公司
  • 查询网站备案进度查询乐清网站改版公司
  • 建设银行网站不能登录密码北京市建设工程交易服务平台
  • wordpress 中英文网站网站建设企业邮箱制作网站
  • 什么网站可以做相册视频去哪里学习wordpress
  • 企业 宣传 还要网站吗自己做微网站
  • 网站维护中要多久才能重新进入北京注册公司代理机构
  • 哪个网站做外贸比较好建筑工程有哪些项目
  • 网站备案期间 权重沈阳个人网站制作