Express学习(一)

Express

Express简介

  • 什么是Express
    官方给出的概念:Express是基于Node.js平台,快速、开放、极简的web开发框架。
    通俗的理解:Express的作用和Node.js内置的http模块类似,是专门用来创建Web服务器的。
  • 进一步理解Express
    • 不使用Express能否创建Web服务器?
      答案是可以,就之前章节提到的使用 Node.js提供的http模块即可。
    • 那有了http模块为什么还用Express?
      因为http内置模块使用起来比较复杂,开发效率低;Express是基于内置的http模块进一步封装出来的,能够极大的提高开发效率。
    • http内置模块和Express是什么关系?
      类似于浏览器中Web API和 jQuery的关系。后者是基于前者进一步封装出来的。
  • Express可以做什么
    对于前端程序员来说,最常见的两种服务器,分别是:
    • Web网站服务器:专门对外提供Web网页资源的服务器。
    • API接口服务器:专门对外提供API接口的服务器。
      使用Express,我们可以方便、快速的创建Web网站的服务器或API接口的服务器。

Express的基本使用

  • 安装
    在项目所处的目录中打开终端,运行npm i express终端命令,即可将express安装到项目中使用,也可以自己指定版本号,之前讲过如何指定版本号。在安装完成后可以观察项目的配置文件,发现添加了express的相关信息。
  • 创建基本的Web服务器
    步骤跟之前章节学习的http模块创建Web服务器类似
  • 简单介绍get请求和post请求
    • GET请求具体含义如下:
      • 获取数据:GET请求被设计用来请求访问服务器上的资源。用户可以通过指定URL并附加查询参数的方式,来获取服务器上的数据。
      • 幂等性:GET请求具有幂等性,意味着无论请求多少次,服务器上的数据都不会发生变化。这是因为GET请求仅用于数据的检索,而不涉及任何数据的创建、修改或删除操作。
      • 缓存友好:由于GET请求的幂等性和安全性,它们可以被网络代理和浏览器缓存,从而提升效率和性能。
      • 不适合敏感信息:因为GET请求的参数直接暴露在URL中,所以它不适合传递敏感信息,如密码和个人身份信息等。
    • POST请求具体含义如下:
      • 提交数据:POST请求通常用于提交数据到服务器,比如在表单提交时使用。与GET请求不同,POST请求将数据包含在请求体中,而不是URL中。
      • 非幂等性:POST请求是非幂等的,可以用于更新资源,或者向服务器发送应该被处理的数据。每次POST请求可能会改变服务器的状态或产生不同的结果。
      • 隐私性更好:因为POST请求的数据不在URL中显示,所以相比GET请求更加适合传输敏感信息。
      • 编码灵活:POST请求支持多种数据编码方式,并且传送的数据量也没有像GET请求那样受到限制。
  • 监听GET请求
    通过app.get()方法,可以监听客户端的GET请求,具体的语法格式如下
//参数1:客户端请求的URL地址
//参数2:请求对应的处理函数
//      req:请求对象(包含了与请求相关的属性与方法)
//      res:响应对象(包含了与响应相关的属性与方法)
app.get('请求URL', function(req, res) {/*处理函数*/})
  • 监听POST请求
    通过app.post()方法,可以监听客户端的POST请求,具体的语法格式如下
//参数1:客户端请求的URL地址
//参数2:请求对应的处理函数
//      req:请求对象(包含了与请求相关的属性与方法)
//      res:响应对象(包含了与响应相关的属性与方法)
app.post('请求URL', function(req, res) {/*处理函数*/})
  • 把内容响应给客户端
    通过res.send()方法,可以把处理好的内容发送给客户端:
app.get('/user', (req, res) => {
//向客户端发送JSON对象
res.send({ name: 'zs', age: 20, gender: '男' })
})app.post('/user', (req, res) => {
//向客户端发送文本内容
res.send('请求成功')
})
  • 获取URL中携带的查询参数
    通过req.query对象,可以访问到客户端通过查询字符串的形式,发送到服务器的参数:
app.get('/', (req, res) => {
//req.query默认是是一个空对象
//客户端使用 ?name=zs&age=20 这种查询字符串的形式,发送到服务器的参数
//可以通过 req.query 对象访问到,例如
//req.query.name  req.query.age
console.log(req.query)
})
  • 获取URL中的动态参数
    通过req.params对象,可以访问到URL中通过 :匹配到的动态参数:
//URL地址中,可以通过 : 参数名的形式,匹配动态参数值
app.get('/user/:id', (req, res)  => {
//req.params默认是一个空对象
//里面存放着通过 : 动态匹配到的参数值
console.log(req.params)
})
  • 示例
//导入express
const express = require('express')
//创建web服务器
const app = express()//监听客户端的GET和POST请求,并向客户端响应具体的内容
//参数1:客户请求的URL地址
//参数2:请求对应的处理参数
//      req:请求对象(包含了与请求相关的属性与方法)
//      res:响应对象(包含了与相应相关的属性与方法)
app.get('/user', (req, res) => {//调用express提供的res.send()方法,向客户端响应一个JSON对象res.send({ name: 'zs', age: 20, gender: '男' })
})app.post('/user', (req, res) => {//调用express提供的res.send()方法,向客户端响应一个文本字符串res.send('请求成功')
})app.get('/', (req, res) => {//通过req.query可以获取到客户端发送过来的查询参数//注意:默认情况下,req.query是一个空对象console.log(req.query)res.send(req.query)
})//注意:这里的 :id是一个动态的参数,:是固定的,但是id可以换成任意一个合法的名称
//如果有多个参数,可以继续添加,例如/user/:id/:name,网址就类似于http://127.0.0.1/user/6/zs
app.get('/user/:id', (req, res) => {//req.params是动态匹配到的URL参数,默认也是一个空对象console.log(req.params)res.send(req.params)
})//调用app.listen(端口号,启动成功后的回调函数),启动服务器
app.listen(80, () => {console.log('express server running at http://127.0.0.1')
})

首先尝试获取URL中携带 的查询参数,首先需要启动服务器,然后 复制该 网址,后面输入?及参数,如下

然后获取URL中的动态参数,如下

在这里插入图片描述
###托管静态资源

  • express.static()
    express提供了一个非常好用的函数,叫做express.static(),通过它,我们可以非常方便的创建一个静态资源服务器,例如通过如下代码就可以 将public目录下的图片、css文件、javascript文件对外开放访问了:
    app.use(express.static('public'))
    然后就可以访问该目录中的所有文件了,例如http://localhost:3000/css/style.css
    注意:Express在指定的静态目录中查找文件,并对外提供资源的访问路径,因此,存放静态文件的目录名不会出现在URL中。
    例如在该文件下有test目录 ,里面存放了html、css和js文件,通过以下代码对外开放
const express = require('express');
const app = express()//在这里调用express.static()方法,快速对外提供静态资源
app.use(express.static('./test'))app.listen(80, () => {console.log('express server running at http://127.0.0.1')
})

运行后test.html文件调用如下,同样也可以调用该目录下的其它文件

  • 托管多个静态资源目录
    如果托管多个静态资源目录,直接多次调用express.static()函数,在访问静态资源文件时,express.static()函数会根据目录的添加 顺序查找所需的文件。注意是按照顺序查找,如果多个目录有重名的文件,那他会显示最先添加的目录里的文件。
  • 挂载路径前缀
    如果希望在托管的静态资源访问路径之前挂载路径前缀,可以使用如下方式,就可以使用目录名进行访问,避免出现重复文件而导致的问题
    app.use('/test', express.static('test'))

nodemon

  • 为什么要使用nodemon
    因为在编写调试Node.js项目的时候,如果 修改了项目的代码,需要频繁的保存然后重新启动才能应用新代码,很麻烦。
    现在我们可以使用nodemon这个工具,它能够监听项目文件的变动,当代码修改后,nodemon会自动帮我们重启项目,很方便开发和调试。
  • 安装nodemon
    在终端中运行如下命令,即可将nodemon安装为全局可用的工具
    npm install -g nodemon
  • 使用nodemon
    当基于Node.js编写一个网站应用的时候,传统的方式是运行node app.js命令来启动项目,这样做的坏处是代码被修改之后需要手动重启项目。
    现在我们可以将node命令替换为nodemon命令,使用nodemon app.js来启动项目,这样当代码被修改保存之后,会被nodemon监听到,从而时间自动重启项目的效果。如下
    在这里插入图片描述

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

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

相关文章

【软件使用】Markdown编辑器第一次使用介绍

【软件使用】Markdown编辑器第一次使用介绍 markdown格式支持的软件有:VS Code 和 Typora,CSDN写网页博文也是用的.md,CSDN能支持导入的文件也是以.md格式结尾的文件名。 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markd…

C语言——结构体(位段)、联合体、枚举

hello,大家好!我是柚子,今天给大家分享的内容是C语言中的自定义类型结构体、联合体以及枚举,有什么疑问或建议可以在评论区留言,会顺评论区回访哦~ 一、结构体 struct a.结构体声明 不同于数组的是,结构…

【CSP试题回顾】202212-2-训练计划

CSP-202212-2-训练计划 解题思路 输入和初始化: 首先,代码从输入中获取项目的截止日期和项目数量。然后,它初始化一个项目列表,每个项目都有其依赖项、被依赖的项目集合、完成时间、总完成时间(包括依赖链&#xff09…

【JavaSE】面向对象——多态性

多态性 多态性的概念 所谓多态性,理解为一个事物的多种形态。具体点就是去完成某个动作时,不同的对象会产生不同的状态。 多态性的好处 多态在Java中指的是父类的引用指向子类的对象,或者可以说是子类的对象赋给父类的引用。这样在我们的…

SpringBoot实现分页模糊查询

1. Navicat查询数据 Navicat中查询所有数据 SELECT * FROM sys_user;Navicat中查询前两条数据(俩种方式) SELECT * FROM sys_user LIMIT 2; //从0开始,第一个参数是起始位置即(pageNum-1)*pageSize,第二个参数是步长 SELECT * …

项目部署后 通过公网IP访问不到的问题解决

目录 1.检查项目是否在运行(第二行命令) 2.检查所用服务器防火墙是否打开 3.检查linux系统防火墙有没有打开 问题如图: 首先确保项目已经成功部署 1.检查项目是否在运行(第二行命令) 第一行命令是监听58080端口,我的项目是使用该端口 2.检查所用云服务器防火墙是否打开 我…

分享77个Html杂七杂八模板,总有一款适合您

分享77个Html杂七杂八模板,总有一款适合您 77个Html杂七杂八模板下载链接:https://pan.baidu.com/s/1-RyIKaxdCu3dbnlMFMwviw?pwd8888 提取码:8888 学习知识费力气,收集整理更不易。知识付费甚欢喜,为咱码农谋福…

每日好题3.5

前缀和 这个题目巨妙,打的时候没写出来,后面补题发现太牛了 思路:当前区间左端点 L L L ,当我们向右移动一次,就相当于,原式 - f ( L ) f ( L 1 e 18 ) f(L) f(L 1e18) f(L)f(L1e18),值就…

linuxOPS基础_服务器构成

服务器的重要结构组成 家用电脑组成: CPU、主板、内存条、显卡、硬盘、电源、风扇、网卡、显示器、机箱、键盘鼠标等等。 CPU CPU是电脑的大脑, CPU发展史: 32 位CPU:最大的内存寻址地址2^32,大约4G的大小。 CP…

CSS3新特性

简介 继CSS2之后,CSS3增加了很多新的特性,虽然W3C仍在规范中,但是很多新的CSS3属性已经在很多现代浏览器中得到了支持。 CSS3边框 在CSS3中,可以创建圆角边框,添加边框阴影,设置边框图片,利用…

计算机组成原理之机器:计算机系统的基本概念

计算机组成原理之机器 笔记来源:哈尔滨工业大学计算机组成原理(哈工大刘宏伟) Chapter1:计算机系统的基本概念 1.1 计算机系统简介 从物理构成的角度对计算机系统分层 计算机组成原理主要关注微体系结构(Mirco-arc…

【无标题】计算机主要应用于哪些领域

科学计算(或称为数值计算)、数据处理(信息管理)、辅助工程、生产自动化、人工智能。1、科学计算(或称为数值计算):早期的计算机主要用于科学计算。目前,科学计算仍然是计算机应用的一…

【原理图PCB专题】Allegro模块化移动器件报...has the LOCKED property怎么解锁?

在模块化原理图时,PCB也需要做一个模块.mdd文件。这时需要先画好图纸然后再制作模块化文件。 修改文件时会发现模块化器件报错,无法编辑模块内部器件和走线,器件和走线都被LOCKED,如下所示报错内容: Symbol "U1" Selected Cannot edit Symbol "U1". M…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件标识)

id为组件的唯一标识,在整个应用内唯一。本模块提供组件标识相关接口,可以获取指定id组件的属性,也提供向指定id组件发送事件的功能。 说明: 从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容…

代码随想录算法训练营第九天

28. 实现 strStr() &#xff08;本题可以跳过&#xff09; 方法&#xff1a; 方法一&#xff1a; 暴力法 i 表示最多能移动到n-m位置&#xff0c; 超过则退出循环。j表示haystack 初始位置k表示needle的初始位置如果haystack [j] needle[k]且 k<m 则 j, k; 如果 km 则返…

OJ输入问题+准备

写在之前&#xff1a; 发现题目输入是这样的&#xff1a; 我的问题&#xff1a;如何通过空格分割这些输入的字符串并分别保存&#xff01;&#xff01;&#xff08;C语言scanf好解决一点但我选择C....&#xff09; C引入了ostringstream、istringstream、stringstream这三个类…

DevOps中集成自动化测试的具体案例

在DevOps中集成自动化测试的具体案例可以从多个角度进行分析,包括金融行业、分布式系统、大型企业等不同领域的实践。以下是几个具体的案例: 金融行业的DevOps实践:在金融行业中,DevOps被广泛应用于提升软件开发和运营的效率。例如,通过解析后台接口代码日志格式,自动化生…

linuxOPS基础_运维概述,及其泛概念

运维岗位定义 什么是运维&#xff1f; ​ 在技术人员&#xff08;写代码的&#xff09;之间&#xff0c;一致对运维有一个开玩笑的认知&#xff1a;运维就是修电脑的、装网线的、背锅的岗位。 ​ IT运维管理是指为了保障企业IT系统及网络的可用性、安全性、稳定性&#xff0…

SPI总线知识总结

1 SPI的时钟极性CPOL和时钟相位CPHA的设置 1.1 SPI数据传输位数 SPI传输数据过程中总是先发送或接收高字节数据&#xff0c;每个时钟周期接收器或发送器左移一位数据。对于小于16位的数据&#xff0c;在发送前必须左对齐&#xff0c;如果接收的数据小于16位&#xff0c;则采用软…

汽车碰撞与刮伤的实用维修技术,汽车的车身修复与涂装修补教学

一、教程描述 本套汽车维修技术教程&#xff0c;大小7.44G&#xff0c;共有60个文件。 二、教程目录 01-汽车车身修复教程01-安全规则&#xff08;共3课时&#xff09; 02-汽车车身修复教程02-汽车结构&#xff08;共3课时&#xff09; 03-汽车车身修复教程03-汽车修复所使…