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

Node.js 的 http 模块

http 模块是 Node.js 的核心模块之一,它提供了许多方法用于创建 HTTP 服务器、发送 HTTP 请求等。

http 模块的函数

创建一个 http 服务器

http.createServer([requestListener])

参数:

  • requestListener:可选参数,接收请求的回调函数。requestListener 会处理每个 HTTP 请求,并接收两个参数:req(请求对象)和 res(响应对象)。

返回值:

  • 返回一个 HTTP 服务器实例(http.Server 对象)。

示例:

import http from 'http';

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });    // 服务器返回的数据格式
    res.end('Hello, World!');    // 返回的数据
});

设置 http 服务器的监听端口

http.Server.listen([port[, hostname[, backlog[, callback]]]])

参数:

  • port:要监听的端口。
  • hostname:可选,指定要绑定的主机名(默认为 localhost)。
  • backlog:可选,指定监听队列的长度。
  • callback:可选,当服务器启动成功后执行的回调函数。

返回值:

  • 返回 http.Server 实例。

示例:

import http from 'http';

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

关闭 http 服务器

http.Server.close([callback])

close 不会立即断开连接,而是等待现有请求执行完成。

参数:

  • callback:可选,当服务器关闭时调用的回调函数。

返回值: 无。

示例:

import http from 'http';

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!');
});
server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});
// 模拟服务器关闭
setTimeout(() => {
    server.close(() => {
        console.log('Server is closed.');
    });
}, 5000); // 5秒后关闭服务器

设置服务器超时时间

http.Server.setTimeout(msecs[, callback])

参数:

  • msecs:超时时间(以毫秒为单位)。
  • callback:可选,在超时事件发生时调用的回调函数。

返回值:

  • 返回 http.Server 实例。

示例:

import http from 'http';

const server = http.createServer((req, res) => {
    setTimeout(() => {

    }, 10000);
});
server.listen(3000);
server.setTimeout(5000, () => {
    console.log('Server timeout');
});

设置服务器可以注册的最大监听器数量

http.Server.setMaxListeners(n)

意思是一个事件,有几个监听这个事件的函数?默认最大数量是10。设置太多容易发生内存泄漏。

参数:

  • n:最大监听器数量。

返回值:

  • 返回 http.Server 实例。

示例:

import http from 'http';

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!');
});
server.setMaxListeners(20);

发送一个 http 请求

http.request(options[, callback])

参数:

  • options:请求的配置对象(例如:hostname, port, method, headers 等)。
  • callback:可选,处理响应的回调函数。

返回值: 

  • 返回一个客户端请求对象(http.ClientRequest 对象)。

示例:

import http from 'http';

const options = {
    hostname: '127.0.0.1',
    port: 3000,
    path: '/',
    method: 'GET'
};
const req = http.request(options, (res) => {
    let data = '';              // 创建一个变量,用于接收服务器的响应数据。
    res.on('data', (chunk) => { // res 对象是服务器的响应对象,on 监听 'data' 事件,chunk 是每次接收到的数据块
        data += chunk;          // 每次收到数据块时,都会将其追加到 data 字符串中,最终构成完整的响应数据
    });
    res.on('end', () => {       // 注册了一个 'end' 事件的监听器,当整个响应的数据接收完毕时,'end' 事件会被触发。在此回调函数内,输出完整的响应数据。
        console.log(data);
    });
});
req.end();  // 结束请求并告知服务器请求已经完成。

示例:        发送一个 post 请求

import http from 'http';

// 配置请求选项
const options = {
    hostname: '127.0.0.1',
    port: 3000,
    path: '/',
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',  // 表单数据类型
        'Content-Length': Buffer.byteLength('name=John&age=30')  // 请求体长度,即发送数据的字节长度
        // 'Content-Type': 'application/json',  // 请求体类型,json 类型
        // 'Content-Length': Buffer.byteLength(JSON.stringify({ name: 'John', age: 30 }))  // 请求体长度,json 类型
    }
};

// 创建 POST 请求
const req = http.request(options, (res) => {
    let data = '';
    res.on('data', (chunk) => {
        data += chunk;
    });
    res.on('end', () => {
        console.log('Response:', data);
    });
});

req.on('error', (error) => {
    console.error(`Request error: ${error.message}`);
});

// 发送表单数据
const postData = 'name=John&age=30';    // 实际发送的数据
// const postData = JSON.stringify({ name: 'John', age: 30 });  // json 类型
req.write(postData);

// 结束请求
req.end();

发送一个 get 请求

http.get(options[, callback])

参数:

  • options:请求的配置对象(hostname, port, path, headers 等)。
  • callback:处理响应的回调函数。

返回值:

  • 返回一个 http.ClientRequest 对象。

示例:

import http from 'http';

http.get('http://127.0.0.1:3000', (res) => {
    let data = '';                  // 创建一个变量,用于接收服务器的响应数据。
    res.on('data', (chunk) => {     // res 对象是服务器的响应对象,on 监听 'data' 事件,chunk 是每次接收到的数据块
        data += chunk;              // 每次收到数据块时,都会将其追加到 data 字符串中,最终构成完整的响应数据
    });
    res.on('end', () => {           // 注册了一个 'end' 事件的监听器,当整个响应的数据接收完毕时,'end' 事件会被触发。在此回调函数内,输出完整的响应数据。
        console.log(data);
    });
});

获取当前服务器的连接数

http.Server.getConnections(callback)

参数:

  • callback:回调函数,接收两个参数:err(错误对象)和 count(连接数)。

返回值: 无。

示例:

import http from 'http';

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, World!');
});
server.listen(3000);
setTimeout(() => {
    server.getConnections((err, count) => {
        console.log('Current connections:', count);
    });
}, 5000);

相关文章:

  • 前端监控的具体实现细节
  • 代码补全『三重奏』:EverEdit如何用上下文识别+语法感知+智能片段重构你的编码效率!
  • SAP 归档 生产订单的序列号查询
  • Word Embeddings
  • 51单片机入门_10_数码管动态显示(数字的使用;简单动态显示;指定值的数码管动态显示)
  • Python - 爬虫利器 - BeautifulSoup4常用 API
  • 【故障处理】- xtts增量恢复报ORA-19611
  • Django REST Framework (DRF) 中用于构建 API 视图类解析
  • vue2-this.$set确保数据响应性的实例方法
  • CCF-CSP第31次认证第二题——坐标变换(其二)【NA!前缀和思想的细节,输出为0的常见原因】
  • 大模型 + cursor应用案例
  • 文件fd
  • 苏剑林“闭门造车”之多模态思路浅谈思考
  • PageHelper分页插件
  • C语言题目:链表数据求和操作
  • 【系列教程】Python第三课:用前两课知识解决实际问题
  • “mysqld --initialize --console ”执行不成功情况总结和解决措施
  • vue3-04vue3中ref函数( 定义一个响应式的数据)
  • 设计模式14:职责链模式
  • 普通报表入门
  • 外企聊营商|特雷通集团:税务服务“及时雨”
  • 七旬男子驾“老头乐”酒驾被查,曾有两次酒驾两次肇事记录
  • 体坛联播|C罗儿子完成国家队首秀,德约结束与穆雷合作
  • 中华人民共和国和巴西联邦共和国关于强化携手构建更公正世界和更可持续星球的中巴命运共同体,共同维护多边主义的联合声明
  • 四部门:到2025年底,全国行政村5G通达率超过90%
  • 英国首相斯塔默住所起火,警方紧急调查情况