Node.js中http模块(二)

devtools/2025/2/12 13:01:49/

一、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.ppmy.cn/devtools/157624.html

相关文章

通过案例讲述docker,k8s,docker compose三者的关系

以下是一个结合 Docker、Docker Compose 和 Kubernetes&#xff08;k8s&#xff09;的案例&#xff0c;展示三者在应用开发、本地测试和生产部署中的协作关系&#xff1a; 案例背景 假设我们要开发一个 Web 应用&#xff0c;包含以下组件&#xff1a; 前端&#xff1a;Node.j…

【多线程-第三天-NSOperation和GCD的区别 Objective-C语言】

一、我们来看NSOperation和GCD的区别 1.我们来对比一下,NSOperation和GCD, 那这个代码,我们都写过了, 我们来看一下它们的特点啊,首先来看GCD, 1)GCD是C语言的框架,是iOS4.0之后推出的,并且它的特点是,针对多核做了优化,可以充分利用CPU的多核,OK,这是GCD, 2…

Opencv操作相关内容记录

关于opencv的安装包 https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv 机器人相关视频 http://i.youku.com/u/UMTkxNDMxNDkxNg 机器人历史及机器人应用_1 空间描述&#xff0c;广义坐标_2 [第3集] 东芝公司开发的柔性致动器 机器人“蜂鸟”_4 灵长类仿生机器人_5 [第6集…

07苍穹外卖之redis缓存商品、购物车(redis案例缓存实现)

课程内容 缓存菜品 缓存套餐 添加购物车 查看购物车 清空购物车 功能实现&#xff1a;缓存商品、购物车 效果图&#xff1a; 1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压…

使用rustDesk搭建私有远程桌面

一、rustDesk官方网站 RustDesk – 开源远程桌面访问软件 二、下载地址 客户端&#xff1a;https://github.com/rustdesk/rustdesk/releases/tag/1.2.7 服务端&#xff1a;https://github.com/rustdesk/rustdesk-server/releases/tag/1.1.11-1 三、服务端安装&#xff08;…

css实现长尾箭头(夹角小于45度的)

1. 长尾夹角小于45度的箭头 代码 //h5<div class"singleArrow"></div>//css .singleArrow {width: 150px;height: 1px;position: relative;background-color: #15ff00;/* transform: rotate(-40deg); */ /* 旋转角度 */}.singleArrow::after{ // 成品-有…

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列&#xff0c;其在不同版本的发布过程中&#xff0c;逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本&#xff0c;从版本的发布时间、特点、优势以及不足之处&#xff0…

2024 Rust现代实用教程:1.1Rust简介与安装更新

文章目录 一、Rust安装二、更新Rust三、Rust的Stable与Nightly版本四、卸载ubuntu安装的cargo和rustup五、rust源设置六、rust交叉编译工具链说明 rustup稳定版交叉编译步骤 步骤 1&#xff1a;安装目标组件步骤 2&#xff1a;安装交叉编译工具链步骤 3&#xff1a;配置环境变…