【Node.js】 创建web服务器
Node.js
- 什么是客户端,什么是服务器
- 服务器和普通电脑的区别
- 什么是http模块
- 导入http模块
- 服务器相关概念
- 创建web服务器的基本步骤
- req请求对象
- req响应对象
- 解决中文乱码
- 根据不同的url响应不同的html内容
什么是客户端,什么是服务器
- 客户端
- 在网络节点中,负责消费资源的电脑叫做客户端
- 服务器
- 负责对外提供网络资源的电脑,叫做服务器
服务器和普通电脑的区别
- 服务器上安装了web服务软件,例如:IIS,Apache等,通过安装这些服务器软件(外网服务器),就把普通电脑变成web服务器了
- 在node.js中,我们不需要使用第三方外网服务器软件,因为我们可以基于node.js提供的http模块,通过几行代码手写一个服务器,从而对外提供web服务
什么是http模块
- http模块是Node.js官方提供的,用来创建web服务器的模块
- 通过http模块提供的http.createServer()方法,就能方便的把一台普通的电脑,变成一台web服务器,从而对外提供web资源服务
导入http模块
const http = require('http')
服务器相关概念
- IP地址,就是互联网上每台计算机的唯一地址,IP地址具有唯一性
- 域名地址,因为IP地址是一长串数字,不便于记忆,于是人们使用另一套字符型的地址方案,即域名地址
- DNS域名服务器,IP地址和域名是一一对应的关系,这个关系存放在DNS域名服务器的电脑中,可以实现之间的转化
- 例如:127.0.0.1对应的域名是localhost
- 端口号,类似现实生活中的门牌号,一台电脑运行n个web服务,每个服务对应唯一一个端口号,客户端发送的请求,通过端口号,可以准确的交给对应的web服务进行处理
- (每个端口号只能被一个web服务占用)(实际应用中,url的80端口可以被省略)
创建web服务器的基本步骤
//步骤一:导入http模块
const http = require('http')
//步骤二:创建web服务器实例
const server= http.createServer()
//步骤一:为服务器实例绑定reqest事件,监听客户端的请求
server.on('request',(req,res)=>{ //参数一是事件的名称,参数二是触发事件的回调//只要有客户端请求我们服务器,就会触发reqest事件,从而调用这个事件处理函数console.log("请求了!")
})
//步骤四:启动服务器
server.listen(80,()=>{ //参数一是端口号,让服务器运作在80端口处,参数二,请求成功的回调console.log("启动成功")
})
//运行时,cmd运行node 文件名
//vscode运行,终端-新建终端-

- 运行如果报错,别慌,只是你现在用的端口被占用了

req请求对象
- 只要服务器接收到了客户端的请求,就会调用server.on()为服务器绑定的reqest事件处理函数
- 如果想在事件处理函数中,处理与客户端相关的数据或属性,可以使用下面方法
server.on('request',(req)=>{ //参数一是事件的名称,参数二是触发事件的回调//req是请求对象,它包含了与客户端相关的数据和属性//req.url是客户端请求的URl地址//req。mrthod是客户端的method请求类型console.log("请求了!")
})
//点击下方地址就可请求
server.listen(80, () => { //参数一是端口号,让服务器运作在80端口处,参数二,请求成功的回调console.log("启动成功http://127.0.0.1")
})
req响应对象
- 在服务器的reqest事件处理函数中,如果想访问与服务器相关的数据或属性
server.on('request',(req,res)=>{ //参数一是事件的名称,参数二是触发事件的回调//res是响应对象,它包含了与服务端相关的数据和属性//要发送到客户端的字符串const str ="想发送的字符串"//res.end()方法的作用//向客户端发送指定的内容,并结束这次请求res.end(str)
})
解决中文乱码
- 当调用res.end方法时候,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式
- 需要设置响应头

server.on('request',(req,res)=>{ //要发送到客户端的字符串const str ="想发送的字符串"res.setHeader('Content-Type','text/html;charset=UTF-8')//res.end()方法的作用res.end(str)
})

根据不同的url响应不同的html内容
- 获取请求的url地址
- 设置默认的响应内容为404 Not found
- 判断用户的请求是否为想要的页面
- 设置Contant-Type响应头,防止中文乱码
- 使用res.end()把内容响应给客户端
server.on('request', (req, res) => {const url = res.urllet content = "<h1>404 Not found</h1>"if(url==='/'||url==='/index/html'){content ="<h1>首页</h1>"}else{content ="<h1>编程</h1>"}res.setHeader('Content-Type','text/html;charset=UTF-8')res.end(content)
})
server.listen(80, () => { //点击链接进行请求console.log("启动成功http://127.0.0.1")
})

相关文章:
【Node.js】 创建web服务器
Node.js什么是客户端,什么是服务器服务器和普通电脑的区别什么是http模块导入http模块服务器相关概念创建web服务器的基本步骤req请求对象req响应对象解决中文乱码根据不同的url响应不同的html内容什么是客户端,什么是服务器 客户端在网络节点中&#x…...
基于go语言实现RestFul交互
一、RestFul 1.1 RestFul的介绍 RESTFUL(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP或HTTPS,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务接口的场景&…...
情感溢出:读《浣溪沙》
浣溪沙 谁念西风独自凉 作者 纳兰性德 谁念西风独自凉,萧萧黄叶闭疏窗,沉思往事立残阳。 被酒莫惊春睡重,赌书消得泼茶香,当时只道是寻常。 记得年轻时学这篇词,就是愣背,现在也就记得这句当时只道是寻常…...
深入解读.NET MAUI音乐播放器项目(一):概述与架构
系列文章将分步解读音乐播放器核心业务及代码: 深入解读.NET MAUI音乐播放器项目(一):概述与架构深入解读.NET MAUI音乐播放器项目(二):播放内核深入解读.NET MAUI音乐播放器项目(三…...
【Python小游戏】某程序员将套圈游戏玩儿到了巅峰,好嗨哟~Pygame代码版《牛牛套圈》已上线,大人的套圈游戏太嗨了,小孩勿进。
前言 世上选择那么多。 关注栗子同学会是您最明智的选择哦。 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 “幸运牛牛套圈圈”套住欢乐,圈住幸福,等你来挑战…...
php的declare命令如何使用?
php中的declare结构用来设定一段代码的执行指令declare用于执行3个指令:ticks,encoding,strict_typesdeclare结构用于全局范围,影响到其后的所有代码(但如果有declare结构的文件被其他文件包含,则对包含他的父文件不起作用&#x…...
嵌软工程师要掌握的硬件知识2:一文看懂什么开漏和推挽电路(open-drain / push-pull)
想了解开漏和推挽,就要先了解一下三极管和场效应管是什么,在其他章节有详细介绍,本文就不再进行赘述。 1 推挽(push pull)电路 1.1 理解什么是推挽电路 - 详细介绍 如图所示,Q3是个NPN型三极管,Q4是个PNP型三极管。 1)当Vin电压为正时,上面的N型三极管控制端有电…...
1.2.6存储结构-磁盘管理:单缓冲区与双缓冲区读取、流水线周期、计算流水线执行时间
1.2.6存储结构-磁盘管理:单缓冲区与双缓冲区读取、流水线周期、计算流水线执行时间流水线周期计算流水线执行时间微秒,时间单位,符号μs(英语:microsecond ),1微秒等于百万分之一秒(…...
【pytest接口自动化测试】结合单元测试框架pytest+数据驱动模型+allure
api: 存储测试接口 conftest.py :设置前置操作 目前前置操作:1、获取token并传入headers,2、获取命令行参数给到环境变量,指定运行环境commmon:存储封装的公共方法 connect_mysql.py:连接数据库http_requests.py: 封装…...
展锐平台WIFI吞吐问题解决方案
同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 一、Wi-Fi 吞吐验收标准 预置条件:屏蔽房;DUT 距离 AP 1m 左右;测试 AP 不加密;…...
全局向量的词嵌入(GloVe)
诸如词-词共现计数的全局语料库统计可以来解释跳元模型。 交叉熵损失可能不是衡量两种概率分布差异的好选择,特别是对于大型语料库。GloVe使用平方损失来拟合预先计算的全局语料库统计数据。 对于GloVe中的任意词,中心词向量和上下文词向量在数学上是等…...
华为OD机试 - 特异性双端队列(Python),真题含思路
特异性双端队列 题目 有一个特异性的双端队列,该队列可以从头部到尾部添加数据,但是只能从头部移除数据。 小 A 一次执行 2 n 2n 2n 个指令往队列中添加数据和移除数据, 其中 n n n 个指令是添加数据(可能从头部也可以从尾部添加) 依次添加 1 到...
【Linux】操作系统进程概念
文章目录1. 冯诺依曼体系结构2. 操作系统3. 进程进程的基本概念查看进程和杀死进程父进程和子进程通过系统调用创建子进程1. 冯诺依曼体系结构 冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。数学家冯诺依曼提出了计算…...
C语言const的用法详解
有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定:constin…...
Day886.MySQL的“饮鸩止渴”提高性能的方法 -MySQL实战
MySQL的“饮鸩止渴”提高性能的方法 HI,我是阿昌,今天学习记录的是关于MySQL的“饮鸩止渴”提高性能的方法的内容。 不知道在实际运维过程中有没有碰到这样的情景: 业务高峰期,生产环境的 MySQL 压力太大,没法正常响…...
08- 数据升维 (PolynomialFeatures) (机器学习)
在做数据升维的时候,最常见的手段就是将已知维度进行相乘(或者自乘)来构建新的维度 使用 np.concatenate()进行简单的,幂次合并,注意数据合并的方向axis 1 数据可视化时,注意切片,因为数据升维…...
2023备战金三银四,Python自动化软件测试面试宝典合集(二)
马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试,一个程序员成长之路永恒绕…...
笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】
回到首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.08.24应聘岗位:数字芯片设计工程师笔试时长:90min笔试平台:nowcoder牛客网题目类型:单选题(18道)、不定项选择题(22道)题目评…...
WordPress网站日主题Ri主题RiProV2主题开启了验证码登录但是验证码配置不对结果退出登录后进不去管理端了
背景 WordPress网站日主题Ri主题RiProV2主题开启了验证码登录但是验证码配置不对结果退出登录后进不去管理端了;开启了腾讯云验证码防火墙但APPID,APPSecret没配置,结果在退出登录后,由于验证码验证失败管理端进不去了 提示如下:...
自动驾驶感知——毫米波雷达
文章目录1. 雷达的基本概念1.1 毫米波雷达分类1.2 信息的传输1.3 毫米波雷达的信号频段1.4 毫米波雷达工作原理1.4.1 毫米波雷达测速测距的数学原理1.4.2 毫米波雷达测角度的数学原理1.4.3 硬件接口1.4.4 关键零部件1.4.5 数据的协议与格式1.5 车载毫米波雷达的重要参数1.6 车载…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
