学习Node.js中的http模块

news2024/10/22 17:51:52

这期学习在node.js中内置模块http模块

目录

一、定义

二、服务器

IP 地址

域名和域名服务器

端口号

三、创建基本的服务器

导入http模块

通过http模块创建一个web服务器实例

http.Server的事件

 request

为服务器绑定请求request事件,监听客户端的请求

 服务器返回响应

 connection

 close

启动服务,并且说明端口号

四、实例

1.http实例,用终端运行js文件之后,在浏览器输入127.0.0.1.2020(端口)可以收到服务器端响应的事务

2.根据不同的url打开不同的网页


一、定义

http 模块是Node.js官方提供的、用来创建 web 服务器的模块,通过 http模块提供的 http.createServer()方法,就能方便的把一台普通的电脑,变成一台Web服务器,从而对外提供Web资源服务。

简单来说就是把自己电脑创建成一个 HTTP 服务器,该服务器侦听服务器端口并将响应返回给客户端。

二、服务器

在学习http模块之前,首先我们要了解一下“服务器”

IP 地址

IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异

在我们每台电脑上都存在一个IP地址,这个IP地址是唯一的,而且是能标明电脑内的一串数字

IP地址的格式通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是 0~255 之间的十进制整数。例如:用点分十进表示的iP地址(192.168.1.1)

域名和域名服务器

域名(Domain name)是互联网基础架构的关键部分。它们为互联网上任何可用的 Web 服务器提供了方便人类理解的地址。

DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。

域名其实就是为了方便理解人们发明的有一种字符型的地址方案,而域名服务器就是将域名与唯一性质的IP地址进行联系,域名服务器就是提供 IP地址和域名之间的转换服务的服务器

端口号

所谓的端口,就时客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号

每个web服务都对应一个唯一的端口号,客户端发送过来的网络请求,通过端口号,可以被准确地交给对应的web服务进行处理

三、创建基本的服务器

导入http模块

首先导入http模块,作为node.js的内置模块出现

const http = require('http')

通过http模块创建一个web服务器实例

使用createServer()方法创建HTTP服务器,该服务器开始侦听服务器端口并将响应返回给客户端。

在我们的示例中,我将HTTP服务器命名为app

const app = http.createServer()

http.Server的事件

http.Server 是一个基于事件的服务器,继承自 EventEmitter。http.Server 提供的事件如下所示:

 request

当客户端请求到来时,该事件被触发,提供两个参数req和res,表示请求和响应信息,是最常用的事件。

为服务器绑定请求request事件,监听客户端的请求

request事件语法如下:

app.on('事件类型', 回调函数)

 例如:

app.on('request', (req, res) => {})

其中:只要有客户端来请求我们自己的服务器,就会触发 request 事件,从而调用这个事件处理函数,req是请求对象,里面存储着客户端的请求信息,会返回请求的一些数据,res是响应对象,里面存储着服务器的响应信息

 服务器返回响应
res.end('')

设置内容格式:当调用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式

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

 connection

当TCP连接建立时,该事件被触发,提供一个参数socket,是net.Socket的实例。

 close

当服务器关闭时,触发事件(注意不是在用户断开连接)

启动服务,并且说明端口号

app.listen(端口号,回调函数)

四、实例

1.http实例,用终端运行js文件之后,在浏览器输入127.0.0.1.2020(端口)可以收到服务器端响应的事务

// 引入 http 模块
const http = require('http')
// 创建一个 HTTP 服务器实例
const app = http.createServer()
// 监听 request 事件,当有请求到达时执行回调函数
app.on('request', (req, res) => {
    // 打印请求的 URL 和方法
    console.log(`请求地址是${req.url}。请求方式是${req.method}`)
    // 设置响应头,指定内容类型为 HTML,字符编码为 UTF-8
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    // 向客户端发送响应,内容与请求的 URL 和方法相同
    res.end(`请求地址是${req.url}。请求方式是${req.method}`)
})
// 服务器启动,监听 2020 端口,启动成功后在控制台输出提示信息
app.listen(2020, () => {
    console.log('服务器启动成功了~')
})

2.根据不同的url打开不同的网页

// 引入 http 模块
const http = require('http')
// 创建一个 HTTP 服务器实例
const app = http.createServer()
// 监听 request 事件,当有请求到达时执行回调函数
app.on('request', (req, res) => {
    // 设置响应头,指定内容类型为 HTML,字符编码为 UTF-8
    res.setHeader('content-type', 'text/html;charset=utf-8')
    // 根据请求的 URL 发送不同的响应内容
    if (req.url === '/' || req.url === '/index') {
        // 如果请求的是根路径或 /index,发送 '首页' 作为响应
        res.end('首页')
    } else if (req.url === '/about') {
        // 如果请求的是 /about,发送 '关于我们' 作为响应
        res.end('关于我们')
    } else {
        // 如果请求的是其他路径,发送 '404 页面跑丢了' 作为响应
        res.end('404 页面跑丢了')
    }
})
// 服务器启动,监听 3030 端口,启动成功后在控制台输出提示信息
app.listen(3030, () => {
    console.log('启动');
})

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

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

相关文章

021_Thermal_Transient_in_Matlab统一偏微分框架之热传导问题

Matlab求解有限元专题系列 固体热传导方程 固体热传导的方程为: ρ C p ( ∂ T ∂ t u t r a n s ⋅ ∇ T ) ∇ ⋅ ( q q r ) − α T d S d t Q \rho C_p \left( \frac{\partial T}{\partial t} \mathbf{u}_{\mathtt{trans}} \cdot \nabla T \right) \nab…

三个必须了解的知乎知+广告账户知识!

作为国内领先的问答社区,知乎以其高质量的内容和深度讨论吸引了大量专业和兴趣导向的用户群体。对于希望精准触达目标用户的广告主来说,知乎的信息流广告无疑是一个不可多得的营销渠道,云衔科技助力企业知乎广告开户投放及代运营服务。 1. 知…

【rom分享】PSP体育游戏大众高尔夫玩法介绍,不要错过

各位新老观众大家好,今天我将介绍知名掌机PSP的所有游戏,PSP的游戏库非常庞大,随着PSP模拟器的普及,你可以在安卓和苹果两大平台的移动设备上游玩,也可以在PC上面游玩,当然你也可以收藏一个PSP掌机进行游玩…

python3的语法及入门(近7000字,耐心看包全,看完记得点赞)!

1. Python3 基础语法 缩进:Python 使用缩进来表示代码块,通常使用 4 个空格。 语句:一行代码就是一个语句。 变量:不需要声明类型,直接赋值即可。 2. Python3 基本数据类型 Python 中的基本数据类型包括整数、浮点…

Shell学习——shell中的变量

目录 一、父shell和子shell: 二、系统预定变量 定义方式: 脚本举例 ​编辑 四、只读变量 五、撤销变量 六、小结 七、特殊变量 $n $# $*、$ $? 一、父shell和子shell: 由于shell的原理可以理解为套娃,因此有父shell…

【实战案例】Django框架连接并操作数据库MySQL相关API

本文相关操作基于上次操作基本请求及响应基础之上【实战案例】Django框架基础之上编写第一个Django应用之基本请求和响应 Django框架中默认会连接SQLite数据库,好处是方便无需远程连接,打包项目挪到其他环境安装一下依赖一会就跑起来,但是缺点…

你知道吗?这个岗位只招2人,但HR那边却收到了1w份简历

引言 在当前经济环境下,求职者面临的挑战越来越大。互联网行业尤其如此,许多人挤破头都想进入大厂,但竞争异常激烈。如今的就业市场确实变得异常艰难。然而,随着AI大模型技术的兴起,对于那些掌握了相关技能的专业人才…

学习笔记——交换——STP(生成树)基本概念

三、基本概念 1、桥ID/网桥ID (Bridege ID,BID) 每一台运行STP的交换机都拥有一个唯一的桥ID(BID),BID(Bridge ID/桥ID)。在STP里我们使用不同的桥ID标识不同的交换机。 (2)BID(桥ID)组成 BID(桥ID)组成(8个字节):由16位(2字节)的桥优先级…

Java基于SSM微信小程序物流仓库管理系统设计与实现(lw+数据库+讲解等)

选题背景 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

wordcloud分词生成

代码如下 _ from wordcloud import WordCloud import PIL.Image as image import numpy as np import jiebadef cut(text):word_list jieba.cut(text,cut_all True)# 分词后在单独个体之间加上空格result " ".join(word_list)return result#导入文本文件,进行分词…

免费ppt模板从哪找?全面又实用的PPT模板就在这找

就是说有多少刚上大学的朋友,为了交一份完美的PPT报告,手写列大纲、找报告文献/插图素材......最后手动整理排版,老老实实地熬了几个大夜? 24年都快结束啦,大家还没学会去免费的ppt模板网站下载精美的主题PPT一键替换吗…

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录 简介 什么是@gradio/lite? 入门 1.导入 JS 和 CSS 2. 创建标签 3. 在标签内编写你的 Gradio 应用程序 更多示例:添加其他文件和要求 多个文件 其他要求 SharedWorker 模式 代码和演示playground 1.无服务器部署 2.低延迟 3. 隐私和安全 限制 尝试一下!…

VScode远程开发之remote 远程开发(二)

VScode远程开发之remote 远程开发(二) 使用vscode进行远程开发很简单,在拓展里搜索 Remote Development,就可以搜索到微软提供的远程开发大礼包,里面包含了 通过 SSH 远程服务器 远程容器 远程 WSL(Win…

亚马逊测评自养号技术及采购下单成功率揭秘

在亚马逊测评中,自养号面临砍单、买家号关联等问题时,需要采取一系列策略和技术手段来提高采购下单的成功率。以下是一些具体的解决方案: 一、解决砍单问题 1.确保硬件参数独立 每个账号应使用具有独特硬件标识的设备,如IMEI、…

【大模型实战篇】大模型分词算法WordPiece分词及代码示例

继《大模型数据词元化处理BPE(Byte-Pair Encoding tokenization)》之后,我们针对大模型原始数据的分词处理,继续分享WordPiece分词技术【1】。 1. 原理分析 WordPiece 是 Google 开发的分词算法,用于预训练 BERT。此后,它被多个基…

uni-app中添加自定义相机(微信小程序+app)

一、微信小程序中 微信小程序中可以直接使用camera标签&#xff0c;这个标签不兼容app&#xff0c;官方文档 <cameradevice-position"back"flash"off":style"{ height: lheight px, width: lwidth px }"class"w-full"></c…

vue3【实战】 渲染 md 文件(markdown语法 .md后缀的文件)

1. 安装相关插件 npm i unplugin-vue-markdown markdown-it-prism prism unhead/vue2. 添加配置 src/main.ts // 给 md 文件创建头部 import { createHead } from unhead/vue // md 文件中代码高亮的样式 import prismjs/themes/prism.css // 自定义 md 文件的样式 import /as…

【JAVA面试题】什么是Springboot的自动配置以及注意事项

文章目录 强烈推荐核心概念&#xff1a;自动配置的关键特点&#xff1a;示例&#xff1a; 需要注意的点1.默认配置可能不适合所有场景2.Bean 冲突与覆盖3.应用启动慢的问题4.过度依赖自动配置5.安全性问题6.依赖冲突与版本兼容7.过多不必要的自动配置8.调试困难 专栏集锦 强烈推…

.net framework 3.5sp1安装错误卡住不动怎么解决

解决 .NET Framework 3.5 SP1 安装错误卡住的问题&#xff0c;可以尝试以下几种方法&#xff1a; 1.使用 DISM 工具&#xff1a; 将下载的 NetFx3.cab 文件放置在 C:\Windows 文件夹下。 以管理员身份打开命令提示符&#xff0c;输入以下命令&#xff1a; dism /online /En…

【web前端设计】jquery图标动画特效

学习目标 学习web前端设计技术&#xff08;HTML、css、JavaScript、jQuery等&#xff09;&#xff0c;综合运用技术&#xff0c;将其与HTML元素结合&#xff0c;设计样式、监听事件、添加动画等&#xff0c;给用户呈现出更好的视觉交互效果。本文主要学习分页按钮自动放大、元…