【Node.js基础】http模块的使用

news2024/11/15 12:01:00

文章目录

  • 前言
  • 一、客户端与服务器是什么
  • 二、http模块的使用
    • 2.1 导入http模块
    • 2.2 创建web服务器
      • 服务器的相关概念
      • 创建最基本的web服务器
      • req对象
      • 解决发送中文乱码
      • 根据不同的url 响应不同的 html内容
  • 总结


前言

Node.js 提供了一个强大的内置模块——http 模块,用于创建 HTTP 服务器和客户端。HTTP 是一种基于请求和响应的协议,而 http 模块让 Node.js 能够轻松地处理 HTTP 流量。无论是构建 Web 服务器、RESTful API 还是进行 HTTP 客户端请求,http 模块都是 Node.js 中的重要组成部分。

在这篇文章中,我们将深入了解如何使用 http 模块构建简单的 HTTP 服务器,以及如何处理客户端请求和发送响应。通过学习 http 模块的基础使用,你将能够开始构建自己的 Web 应用程序,处理用户请求并提供相应的服务。


一、客户端与服务器是什么

客户端:

客户端就像是你坐在餐馆里的顾客。当你想要点餐时,你会看一看菜单(这就是你在浏览器中输入网址的过程),然后你通过服务员(这就是互联网)把你的点餐信息传递给厨房(服务器)。在这个过程中,你是“请求”的发起者,因为你请求服务员把你的点餐信息送到厨房。

服务器:

服务器就像是餐馆里的厨房。一旦服务员把你的点餐信息传递给厨房,厨房就开始准备你所点的菜品。服务器的工作就是根据客户端的请求(点餐信息)提供相应的服务。一旦厨房完成了准备工作,服务员就会把美味的菜品端到你面前,这就是服务器把数据(网页、图片等)发送回客户端的过程。

总体来说,客户端和服务器之间的关系就像你和餐馆之间的互动一样。你提出请求,服务员把请求传递给厨房,厨房准备好了就把服务送回给你。这种互动构成了互联网上信息传递的基本模型。

二、http模块的使用

2.1 导入http模块

和之前一样,使用require函数导入即可

const http = require('http')

2.2 创建web服务器

服务器的相关概念

IP 地址:

IP 地址就像是房子的门牌号一样,它是一串数字,用来标识网络上的一台设备,比如电脑、手机或服务器。每台设备都有一个唯一的 IP 地址,通过这个地址,其他设备可以找到它并与之通信。

域名:

域名就像是房子的别名,它是一个易于记忆的字符串,用来代替 IP 地址。比如,网站的域名可以是 example.com。当我们在浏览器中输入一个域名时,浏览器会通过域名服务器(DNS)将域名解析为相应的 IP 地址,然后连接到该 IP 地址对应的服务器上获取网页内容。

域名服务器(DNS):

域名服务器就像是电话簿一样,它存储了域名和相应的 IP 地址之间的对应关系。当我们输入一个域名时,浏览器会向域名服务器发送请求,询问该域名对应的 IP 地址是什么。域名服务器会返回相应的 IP 地址,使得浏览器可以连接到相应的服务器上获取网页内容。

端口号:

端口号就像是房子的门上的不同编号,它是一个数字,用来标识一个正在运行的网络应用程序。在一台服务器上,可能同时运行着多个不同的网络应用程序,每个应用程序都会使用不同的端口号来区分它们。比如,Web 服务器通常使用端口号 80 或 443。

总之,IP 地址用来标识设备,域名用来代替 IP 地址方便记忆,域名服务器负责将域名解析为 IP 地址,而端口号则用来标识正在运行的网络应用程序。这些术语共同构成了互联网上数据传输的基础。

创建最基本的web服务器

1.创建web 服务器的基本步骤
导入http 模块
创建web 服务器实例
为服务器实例绑定 request 事件,监听客户端的请求

创建服务器语法:

const server = http.createServer()

绑定服务器语法

server.on('request', (req, res) => {
  console.log('有客户端连接了');
})

只要有客户端来请求我们自己的服务器,就会触发 request 事件,从而调用这个事件处理函数

启动服务器:


server.listen(3000,()=>{
    console.log('http server running at http://localhost:3000');
})

总体代码:

const http = require('http')

const server = http.createServer()

server.on('request', (req, res) => {
  console.log('有客户端连接了');
})

server.listen(3000,()=>{
    console.log('http server running at http://localhost:3000');
})

在这里插入图片描述
打开浏览器输入这个地址即可访问服务器

req对象

req 是请求对象,它包含了与客户端相关的数据和属性
req.urI 是客户端请求的 URL 地址
req.method 是客户端的 method 请求类型

使用req的end方法:向客户端发送指定的内容,并结束这次请求的处理过程

req.end(sendTostr)

解决发送中文乱码

为了防止中文显示乱码的问题,需要设置响应头 Content-Type 的值为 text/html
charset=utf-8

res.setHeader('Content-Type', 'text/html; charset=utf-8')

根据不同的url 响应不同的 html内容

方案:通过获取req的url属性,然后去判断即可


总结

通过本文的介绍,我们深入了解了 Node.js 中的 http 模块。首先,我们了解了如何创建一个简单的 HTTP 服务器,通过监听特定端口并处理客户端请求。随后,我们学习了如何获取和解析请求的 URL,以及如何处理不同的 HTTP 请求方法(GET、POST 等)。

我们还研究了如何设置 HTTP 响应头和主体,向客户端发送适当的响应。通过这些步骤,我们能够构建一个基本的 HTTP 服务器,为客户端提供所需的信息。

总体而言,http 模块为 Node.js 提供了一个强大的工具,使开发者能够轻松构建网络应用。深入了解和熟练运用 http 模块将为你的 Node.js 开发之旅打下坚实的基础。在构建 Web 服务器、RESTful API 或处理 HTTP 客户端请求时,http 模块是不可或缺的利器,为 Node.js 提供了强大的网络处理能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1421643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣 55.跳跃游戏

思路&#xff1a; 从后往前遍历&#xff0c;遇到元素为0时&#xff0c;记录对应的下标位置&#xff0c;再向前遍历元素&#xff0c;看最大的跳跃步数能否跳过0的位置&#xff0c;不能则继续往前遍历 代码&#xff1a; class Solution { public:bool canJump(vector<int>…

linux --中断管理 -- irq的自动探测机制

irq自动探测机制 如果一个设备的驱动程序无法确定它说管理的设备的软件中断号irq&#xff0c;此时设备驱动程序可以使用irq的自动探测机制来获取其正在使用的irq。 使用自动探测机制的条件 内核与驱动&#xff0c;必须共同努力才能完成只限于非共享中断的情况 探测前&#…

[AG32VF407]国产MCU+FPGA Verilog编写控制2路gpio输出不同频率方波实验

视频讲解 [AG32VF407]国产MCUFPGA Verilog编写控制2路gpio输出不同频率方波实验 实验过程 根据原理图&#xff0c;选择两个pin脚作为输出 修改VE文件&#xff0c;clk选择PIN_OSC&#xff0c;使用内部晶振8Mhz&#xff0c;gpio使用PIN_51和52&#xff0c;pinout是数组 添加pll…

并发编程之线程

一、并发、并行、串行 并发: 多个任务在同一时间段内同时执行&#xff0c;如果是单核计算机&#xff0c;CPU会不断地切换任务来完成并发操作 并行:多任务在同一时刻同时执行&#xff0c;计算机需要有多核心&#xff0c;每个核心独立执行一个任务&#xff0c;多个任务同时执行…

C++文件操作(1)

C文件操作 1.文本的写入及读取文本文件写入文本文件读取 2.二进制文件的写入及读取二进制文件写入二进制文件读取 3.小结 C也有处理文件的能力&#xff0c;其功能实现依赖文件流。文件流是C中用来处理文件输入输出的一种流类。文件流可以用于从文件中读取数据或将数据写入到文件…

洛谷P8599 [蓝桥杯 2013 省 B] 带分数

[蓝桥杯 2013 省 B] 带分数 题目描述 100 100 100 可以表示为带分数的形式&#xff1a; 100 3 69258 714 100 3 \frac{69258}{714} 100371469258​。 还可以表示为&#xff1a; 100 82 3546 197 100 82 \frac{3546}{197} 100821973546​。 注意特征&#xff1a;带分…

ASTORS国土安全奖:ManageEngine AD360荣获银奖

美国安全今日&#xff08;AST&#xff09;的年度“ASTORS”国土安全奖计划是一个备受瞩目的活动&#xff0c;致力于突显国土安全领域的创新与进步。这一奖项旨在表彰在保护国家免受安全威胁方面做出卓越贡献的个人和组织。该计划汇聚了执法、公共安全和行业领袖&#xff0c;不仅…

【Web前端实操20】商城官网_黑色导航

今天继续着上一篇博客的内容进行编写,本次主要实现的是商场官网实战里面的黑色导航栏部分,也就是广告图片下面的部分。 本次除了每篇都要通用的样式CSS代码之外,还增添了一个引用矢量图标的样式,如果有兴趣的友友们,可以看看我的这篇博客,上面详细介绍了如何下载矢量图标…

live2D学习:做好让图片动起来的准备

做好让图片动起来的准备https://www.bilibili.com/video/BV1JE411Y7Te?p2&vd_source124076d7d88eee393a1d8bf6fc787efa 把psd文件通过菜单栏的“打开文件”进行导入或直接把psd文件拖到Live2D Cubism Editor 4.0的面板中 网格 我们在点击图像的一部分时&#xff0c;会出现…

Boosting semantic human matting with coarse annotations

前向推理在modelscope中开源了&#xff0c;但是训练没开源&#xff0c;且是基于TensorFlow的&#xff0c;复现起来是比较麻烦的。 1.Introduction 分割技术主要集中在像素级二元分类&#xff0c;抠图被建模为前景图像F和背景图像B的加权融合&#xff0c;大多数matte方法采用指…

RK3568平台 热插拔机制

一.热插拔的基本概念 热插拔是指在设备运行的情况下&#xff0c;能够安全地插入或拔出硬件设备&#xff0c;而无需关闭或重启系统。这意味着你可以在计算机或其他电子设备上插入或拔出硬件组件&#xff08;比如USB设备&#xff0c;扩展卡&#xff0c;硬件驱动器等&#xff09;…

001集—shapefile(.shp)格式详解——arcgis

一、什么是shapefile Shapefile 是一种用于存储地理要素的几何位置和属性信息的非拓扑简单格式。shapefile 中的地理要素可通过点、线或面&#xff08;区域&#xff09;来表示。包含 shapefile 的工作空间还可以包含 dBASE 表&#xff0c;它们用于存储可连接到 shapefile 的要…

mysql入门到精通003-基础篇-SQL

1、目录 2、SQL通用语法及分类 2.1 SQL通用语法 2.2 SQL分类 3、SQL DDL数据库操作 3.1 SQL DDL表操作-创建&查询 3.1.1 表操作-查询 3.1.2 表操作-创建 create table tb_user(id int comment 编号,name varchar(50) comment 用户名,age int comment 用户名,gender varch…

MySQL库表操作 作业

题目&#xff1a; 1. sql语句分为几类?2. 表的约束有哪些,分别是什么,设置的语法分别是什么?3. 做出班级表,学生表的E-R图,数据库模型图,以及核心的sql语句. 1. MySQL致力于支持全套ANSI/ISO SQL标准。在MySQL数据库中&#xff0c;SQL语句主要可以划分为以下几类: > DD…

搜索引擎评价指标及指标间的关系

目录 二分类模型的评价指标准确率(Accuracy,ACC)精确率(Precision,P)——预测为正的样本召回率(Recall,R)——正样本注意事项 P和R的关系——成反比F值F1值F值和F1值的关系 ROC&#xff08;Receiver Operating Characteristic&#xff09;——衡量分类器性能的工具AUC&#xff…

OpenCV 2 - 矩阵的掩膜操作

1知识点 1-1 CV_Assert(myImage.depth() == CV_8U); 确保输入图像是无符号字符类型,若该函数括号内的表达式为false,则会抛出一个错误。 1-2 Mat.ptr(int i = 0); 获取像素矩阵的指针,索引 i 表示第几行,从0开始计行数。 1-3 const uchar* current = mylmage.ptr(row); 获得…

Physically Based Area Lights

11.1 概括 本章介绍了由 Guerrilla Games 公司在 PS4 开发的基于物理的区域照明系统&#xff08;见图11.1&#xff09;。 我们提出了一种新颖、实时的区域照明分析模型&#xff0c;能够支持多种照明形状。每种形状都可以用平面上简单的三维或二维函数来表示。讨论的应用包括以下…

Apache Flink文件上传漏洞(CVE-2020-17518)漏洞代码分析

漏洞复现参考如下文章 Apache Flink文件上传漏洞&#xff08;CVE-2020-17518&#xff09;漏洞复现分析_文件上传漏洞复现cve-CSDN博客 分析代码的话&#xff0c;首先找到漏洞修复的邮件 漏洞详情&#xff0c;可以看到漏洞概要&#xff0c;影响的版本&#xff0c;漏洞描述以及…

Docker核心教程

1. 概述 官网&#xff1a;https://docs.docker.com/ Docker Hub 网站&#xff1a;https://hub.docker.com/ 容器较为官方的解释&#xff1a; 一句话概括容器&#xff1a;容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立…

嵌入式学习第十四天!(结构体、共用体、枚举、位运算)

1. 结构体&#xff1a; 1. 结构体类型定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和指针函数、构造数据类型&#xff09;-CSDN博客 2. 结构体变量的定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和…