Node.js中http模块(二)

一、http模块

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

二、域名和域名服务器

尽管 IP 地址能够唯一地标记网络上的计算机,但!P地址是一长串数字,不直观,而且不便于记忆,于是人们又发明了另一套字符型的地址方案,即所谓的域名(Domain Name)地址。

IP地址和域名是--对应的关系,这份对应关系存放在一种叫做域名服务器(DNS,Domain name server)的电脑中。使用者只需通过好记的域名访问对应的服务器即可,对应的转换工作由域名服务器实现。因此,域名服务器就是提供 IP 地址和域名之间的转换服务的服务器。

注意:

  • 单纯使用 IP 地址,互联网中的电脑也能够正常工作。但是有了域名的加持,能让互联网的世界变得更加方便
  • 在开发测试期间, 127.0.0.1 对应的域名是 localhost,它们都代表我们自己的这台电脑,在使用效果上没有任何区别

 三、端口号

在一台电脑中,可以运行成百上千个web 服务。每个 web 服务都对应一个唯一的端口号。客户端发送过来的网络请求,通过端口号,可以被准确地交给对应的 web 服务进行处理。

四、创建web服务器的步骤

 (1)导入http模块

const http = require('http');

(2)创建web服务器实例

调用http.createServer()方法

// 创建 HTTP 服务器
const server = http.createServer((req, res) => {// 设置响应头res.writeHead(200, { 'Content-Type': 'text/plain' });// 发送响应内容res.end('Hello, World!\n');
})

(3)为服务器实例绑定request事件

用于监听客户端的请求,使用server.on()方法。

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

req请求对象:只要服务器接收到了客户端的请求,就会调用通过 server.on0 为服务器绑定的 request 事件处理函数。如果想在事件处理函数中,访问与客户端相关的数据或属性,可以使用如下的方式:

server.on('request', req=> {//req.url是客户端请求的URL地址//req.method是客户端请求的方法//req.headers是客户端请求的头信息//res是服务器响应对象const str=`你访问的地址是${req.url},请求方法是${req.method},请求头信息是${JSON.stringify(req.headers)}`res.setHeader('Content-Type', 'text/plain;charset=utf-8')console.log(str,'这是服务器响应:')// console.log('收到请求')
})

 res响应对象:在服务器的 request 事件处理函数中,如果想访问与服务器相关的数据或属性,可以使用如下的方式:

server.on('request', (req, res) => {const str=`你访问的地址是${req.url},请求方法是${req.method}`console.log(str, '这是服务器响应:')//res.end()方法用于结束响应,并发送响应数据到客户端res.end(str)
})

(4)启动服务器

利用server.listen()方法来启动服务器。

// 服务器监听端口 3000
server.listen(3000, () => {console.log('Server running at http://localhost:3000/');
});

五、解决中文乱码问题

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

server.on('request', (req, res) => {const str = `你访问的地址是${req.url},请求方法是${req.method}`//为了防止中文乱码,设置响应头res.setHeader('Content-Type', 'text/plain;charset=utf-8')console.log(str, '这是服务器响应:')//res.end()方法用于结束响应,并发送响应数据到客户端res.end(str)
})

六、根据不同的URL响应不同的HTML

(1)获取请求的URL地址

server.on('request', (req, res) => {//获取请求的URL地址const url =req.url
})

(2)设置默认的响应内容为404 Not found

server.on('request', (req, res) => {//获取请求的URL地址const url = req.url//设置默认的响应内容为 404 Not Foundlet content = '404 Not Found'
})

(3)判断用户请求的是否为/或/index.html首页

(4)判断用户请求的是否为/about.html关于页面

server.on('request', (req, res) => {//获取请求的URL地址const url = req.url//设置默认的响应内容为 404 Not Foundlet content = '404 Not Found'//判断用户请求的是否为/或/index.html首页//判断用户请求的是否为/about.html关于页面if (url === '/' || url === '/index.html') {content = '<h1>首页</h1>'} else if (url === '/about.html') {content = '<h1>关于页面</h1>'}
})

(5)设置Content-Type响应头,防止中文乱码

 //设置响应头res.setHeader('Content-Type', 'text/html;charset=utf-8')

(6)使用res.end()把内容响应给客户端

server.on('request', (req, res) => {//获取请求的URL地址const url = req.url//设置默认的响应内容为 404 Not Foundlet content = '404 Not Found'//判断用户请求的是否为/或/index.html首页//判断用户请求的是否为/about.html关于页面if (url === '/' || url === '/index.html') {content = '<h1>首页</h1>'} else if (url === '/about.html') {content = '<h1>关于页面</h1>'}//设置响应头res.setHeader('Content-Type', 'text/html;charset=utf-8')//设置响应内容res.end(content)
})

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

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

相关文章

Dockerfile 文件详解

在平常的开发工作中&#xff0c;我们经常需要部署项目&#xff0c;一个项目开发完成后&#xff0c;使用 Docker 方式部署&#xff0c;那么首先得构造镜像&#xff0c;构造镜像最主要的就是 Dockerfile 文件的编写&#xff0c;今天简单来总结下 Dockerfile 文件的编写以及有哪些…

Git提交错误解决:missing Change-Id in message footer

问题现象&#xff1a; 提交的commit中没有插入change id导致push代码失败。 问题解决&#xff1a; 针对该错误&#xff0c;Git已经给出了解决方案&#xff1a; 1、to automatically insert a Change-Id, install the hook: gitdir$(git rev-parse --git-dir); scp -p -P 2…

第四十一章:沪上逐梦:适应新环境的挑战

2022 年底&#xff0c;凛冽的寒风裹挟着岁末的清冷&#xff0c;毫无保留地席卷了整个华夏大地。上海&#xff0c;这座屹立在东方的繁华都市&#xff0c;在这冰寒彻骨的冬日里&#xff0c;愈发显得冷峻而深沉。小冷怀揣着对新工作的满心期待&#xff0c;以及对未来的无限憧憬&am…

多租户架构设计与实现:基于 PostgreSQL 和 Node.js

多租户架构设计与实现:基于 PostgreSQL 和 Node.js 引言 多租户架构(Multi-tenancy)是现代 SaaS(Software as a Service)应用的核心设计模式之一。它允许多个租户共享同一套应用实例,同时确保数据隔离和安全性。本文将详细介绍多租户架构的设计方案,并基于 PostgreSQL…

顺丰java面试题_顺丰java开发面试分享,顺丰java面试经面试题

今天要给大家分享的是一个小伙伴的顺丰java开发面试过程&#xff0c;其中包括了面试流程&#xff0c;面试题目&#xff0c;和回答&#xff0c;感兴趣的朋友可以来了解一下哈。 一、面试流程 是中午进行的面试&#xff0c;首先是做自我介绍&#xff0c;之后就是讲一下项目&…

天津三石峰科技——汽车生产厂的设备振动检测项目案例

汽车产线有很多传动设备需要长期在线运行&#xff0c;会出现老化、疲劳、磨损等 问题&#xff0c;为了避免意外停机造成损失&#xff0c;需要加装一些健康监测设备&#xff0c;监测设备运 行状态。天津三石峰科技采用 12 通道振动信号采集卡&#xff08;下图 1&#xff09;对…

SpringBoot教程(十四) SpringBoot之集成Redis

SpringBoot教程&#xff08;十四&#xff09; | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 &#xff08;举例讲解&#xff09;2.4 项目中使用之工具类封装 &#xff08;正式用这个&#xff09;2.5 序列化 &…

多智能体协作架构模式:驱动传统公司向AI智能公司转型

前言 在数字化浪潮的席卷下&#xff0c;传统公司的运营模式正面临着前所未有的挑战。随着市场竞争的日益激烈&#xff0c;客户需求的快速变化以及业务复杂度的不断攀升&#xff0c;传统公司在缺乏 AI 技术支撑的情况下&#xff0c;暴露出诸多痛点。在决策层面&#xff0c;由于…

rBits.exe服务备份

Program.cs using System; using System.Collections.Generic; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks;namespace rBits {internal static class Program{/// <summary>/// 应用程序的主入口点。/// </s…

边缘计算网关驱动智慧煤矿智能升级——实时预警、低延时决策与数字孪生护航矿山安全高效运营

迈向智能化煤矿管理新时代 工业物联网和边缘计算技术的迅猛发展&#xff0c;煤矿安全生产与高效运营正迎来全新变革。传统煤矿监控模式由于现场环境复杂、数据采集和传输延时较高&#xff0c;已难以满足当下高标准的安全管理要求。为此&#xff0c;借助边缘计算网关的实时数据…

互联网分布式ID解决方案

业界实现方案 1. 基于UUID 2. 基于DB数据库多种模式(自增主键、segment) 3. 基于Redis 4. 基于ZK、ETCD 5. 基于SnowFlake 6. 美团Leaf(DB-Segment、zkSnowFlake) 7. 百度uid-generator() 基于UUID生成唯一ID UUID生成策略 推荐阅读 DDD领域驱动与微服务架构设计设计模…

深入理解小波变换:信号处理的强大工具

引言 在科学与工程领域&#xff0c;信号处理一直是关键环节&#xff0c;傅里叶变换与小波变换作为重要的分析工具&#xff0c;在其中发挥着重要作用。本文将深入探讨小波变换&#xff0c;阐述其原理、优势以及与傅里叶变换的对比&#xff0c;并通过具体案例展示其应用价值。 一…

【数据结构】(7) 栈和队列

一、栈 Stack 1、什么是栈 栈是一种特殊的线性表&#xff0c;它只能在固定的一端&#xff08;栈顶&#xff09;进行出栈、压栈操作&#xff0c;具有后进先出的特点。 2、栈概念的例题 答案为 C&#xff0c;以C为例进行讲解&#xff1a; 第一个出栈的是3&#xff0c;那么 1、…

vue基础(三)

常用指令 1. v-bind 固定绑定与动态绑定&#xff1a; 语法&#xff1a; 标准语法&#xff1a;v-bind:属性"动态数据" 简写语法&#xff1a;:属性"动态数拓" <!DOCTYPE html> <html lang"en"><head><me…

IDEA中Resolving Maven dependencies卡着不动解决方案

一、修改settings.xml Maven配置阿里云仓库主要通过修改Maven的settings.xml文件来实现‌。以下是具体步骤: ‌1、找到settings.xml文件‌: 通常位于Maven安装目录下的conf文件夹中,或者在用户目录下的.m2文件夹中(如果用户自定义了settings.xml的位置)。 2、‌编辑se…

fastchat 部署大模型

大模型实战--Llama3.1大模型部署及启动Web UI、OpenAI API实操 - 简书一、背景 随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;已成为自然语言处理领域的核心工具。这些模型以其强大的语言理解和生成能力&#xff0c;...ht…

【R语言】卡方检验

一、定义 卡方检验是用来检验样本观测次数与理论或总体次数之间差异性的推断性统计方法&#xff0c;其原理是比较观测值与理论值之间的差异。两者之间的差异越小&#xff0c;检验的结果越不容易达到显著水平&#xff1b;反之&#xff0c;检验结果越可能达到显著水平。 二、用…

【deepSeek R1】Ollama 更改模型安装位置 以及应用安装位置

【deepSeek R1】Ollama 更改模型安装位置 以及应用安装位置 本地版部署deepSeek R1 可以参考文章 3分钟教你搭建属于自己的本地大模型 DeepSeek R1 Ollama 是一个开源工具&#xff0c;旨在帮助用户轻松在本地计算机上运行、部署和管理大型语言模型&#xff08;LLMs&#xff09;…

从结构体成员指针反推结构体地址:rt_container_of 宏解析

文章目录 rt_container_of 宏概述步骤1&#xff1a;计算成员偏移量步骤2&#xff1a;将成员指针转换为字节指针步骤3&#xff1a;计算结构体的地址步骤4&#xff1a;返回结构体指针 代码示例宏的内部实现解析 rt_container_of 宏概述 rt_container_of 宏是一个非常实用的宏定义…

dijkstra算法类型题解

dijkstra算法&#xff08;有权图&#xff0c;无权图&#xff09;&#xff1a; 带权路径长度——当图是带权图时&#xff0c;一条路径上所有边的权值之和&#xff0c;称为该路径的带权路径长度 初始化三个数组&#xff0c;final标记各顶点是否已找到最短路径&#xff0c;dist最…