express 框架

Express 可以方便,快速的创建 Wed 的服务器或 API 接口的服务器

EXpress 介绍

--Express 是基于 Node.js 平台,快速,开放,极简的 Web 开发框架。
--通俗理解:Express 的作用和 Node.js 内置的 http 模块类似,是专门用来创建 Web 服务器的
--Express 本质就是 npm 上的第三方包

Express 的基本使用

第一步:安装

--在项目所在的目录终端进行安装
npm i express

第二步:创建基本的 Web 服务器

// 导入服务器
const express = require("express");
// 创建服务器
const app = express();
// 启动服务器
app.listen(80, () => {
console.log("http://127.0.0.1");
});

第三步:监听 post 请求

通过 app.post() 方法,可以监听客户端的 POST 请求,具体的语法格式如下://参数 1:客户端请求的 URL 地址
//参数 2:请求对应的处理的数
//req:请求对象(包含了与请求相关的属性与方法)
//res:响应对象(包含了与响应相关的属性与方法)app.post("请求 URL", function (req, res) {
/_处理的数_/
});

第四步:监听 get 请求

通过 app.get0方法,可以监听客户端的GET请求,具体的语法格式如下://参数1:客户端请求的 URL地址
//参数2:请求对应的处理函数
//req:请求对象(包含了与请求相关的属性与方法)
//res:晌应对象(包含了与响应相关的属性与方法)app.get('请求uRL',function(req,res){/*处理的数*/})

第五步:把内容响应给客户端

通过res.send0方法,可以把处理好的内容,发送给客户端:app.get('/user',(req, res) => (
//向客户满发送JSON对象
res.send({name:‘zs',age:20,gender:‘男})
})app-post('/user', (req, res) => (
//向宣户满发送义本内容
res.send('请求成功”)
})

托管静态资源

express.static()

express 提供了一个非常好用的函数,叫做 express.static().通过它,我们可以非常方便地创建一个静态资源服务器,

例如,通过如下代码就可以将public目录下的图片、CSS文件、JavaScript文件对外开放访问了:
app.use(express.static('public'))

现在,你就可以访问 public 目录中的所有文件了:

http://localhost:3000/images/bg.jpg

http://localhost:3000/css/style.css

http://localhost:3000/js/login.js

注意:Express 在指定的静态目录中查找文件,并对外提供资源的访问路径。
因此,存放静态文件的目录名不会出现在 URL 中。

提示:public 和 files 是文件夹名,app(Web 服务器)

托管多个静态资源目录

如果要托管多个静态资源目录,请多次调用 express.static() 函数:

app.use(express.static('public'))app.use(express.static('files'))

访问静态资源文件时,express.static() 函数会根据目录的添加顺序查找所需的文件。

挂载路径前缀

如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下的方式:

app.use('/public', express.static('public'))

现在,你就可以通过带有/public 前缀地址来访问 public 目录中的文件了:

http://localhost:3000/public/images/kitten.jpg

http://localhost:3000/public/css/style.css

http://localhost:3000/public/js/app.js

为什么要使用 nodemon

在编写调试 Node.js 项目的时候,如果修改了项目的代码,则需要频繁的手动 close 掉,然后再重新启动,非常繁琐。现在,我们可以使用 nodemon(https://www.npmjs.com/package/nodemon)这个工具,它能够监听项目文件的变动,当代码被修改后,nodemon 会自动帮我们重启项目,极大方便了开发和调试。

安装 nodemon

在终端中,运行如下命令,即可将 nodemon 安装为全局可用的工具:

npm install nodemon -g

使用 nodemon

当基于 Nodejs 编写了一个网站应用的时候,传统的方式,是运行 node app.js 命令,来启动项目。这样做的坏处是:
代码被修改之后,需要手动重启项目。
现在,我们可以将 node 命令替换为 nodemon 命令,使用 nodemon app.js 来启动项目。这样做的好处是:代码
被修改之后,会被 nodemon 监听到,从而实现自动重启项目的效果。

node app.js#将上面的终端命令,替换为下面的终键命令,即可实现自动重启项目的效果
nodemon app. js

Express 中的路由

Express 的语法格式

在 Express 中,路由指的是客户端的请求与服务器处理函数之间的映射关系。
Express 中的路由分 3 部分组成,分别是请求的类型、请求的 URL 地址、处理函数,格式如下:

//app(Web服务器)
app.METHOD(PATH, HANDLER)//请求的类型(METHOD):post/get//请求的URL地址:PATH//处理函数

Express 中路由的例子

Express 中的路由的例子

//app(Web服务器)
//四配GET请求,且请求URL为/
app.get('/', function (req, res) (res.send('Hello World!')
})//匹配POST 请求,且请求 URL为/
app.post('/', function (req, res) {res.send('Got a POST request')
})

路由的匹配过程

每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。

在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的 URL 同时匹配成功,则 Express 会将这次请求,转
交给对应的 function 函数进行处理。

路由匹配的注意点:

1·按照定义的先后顺序进行匹配

2.请求类型和请求的 URL 同时匹配成功,
才会调用对应的处理函数

路由的使用

最简单的用法

在 Express 中使用路由最简单的方式,就是把路由挂载到 app 上,示例代码如下:

const express ▪ require('express')//创建 web 服务器,命名为 appconst app = express()//挂载路由app.get('/'. (reg, res) => {res.send('Hello world.')} )app.post('/', (req, res) => {( res.send('Post Request.') })//启动 web 服势器app.1isten(80, () > { console.log("server running at htrp://127.0.0.1") })

模块化路由

为了方便对路由进行横块化的管理,Express 不建议将路由直接挂戟到 app 上,而是推荐将路由抽离为单独的横块。

将路由抽离为单独模块的步骤如下:

① 创建路由模块对应的.js 文件

② 调用 express.Router()函数创建路由对象

③ 向路由对象上挂载具体的路由

④ 使用 module.exports 向外共享路由对象

⑤ 使用 app.use0 函数注册路由模块

创建路由模块例子:

var express = require('express')
//导入 express//创建路由对象
var router = express.Router()router.get('/user/list',function(req,res){
//3.挂载获取用户列表的路由res.send('Get user list.‘)
})
router.post(/user/add',function(req,res){//4.挂载添加用户的路由
res.send('Add new user.')
})module.exports = router
//向外导出路由对象

注册路由模块

//1.导入路由模块
const userRouter =require('./router/user.js')// 2.使用 app.use()注册路由模块
app.use(userRouter)

为路由模块添加前缀

类似于托管静态资源时,为静态资源统一挂载访问前缀一样,路由模块添加前缀的方式也非常简单:

//1.导入路由模块
const userRouter = require('./router/user.js')// 2.使用 app.use()注册路由模块,并添加统一的访问前缀/api
app.use('/api', userRouter)

Express 中间件

Express 中间件的调用流程

当一个请求到达 Express 的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理。

Express 中间件的格式

Express 的中间件,本质上就是一个 function 处理函数,Express 中间件的格式如下:

var express=require("express")var app=express()app.get("/",function(req,res,next){next();})
app.listen(80,function(){})

注意:中间件函数的形参列表中,必须包含 next 函数。路由处理函数中只包含 res,req。

next 函数的作用

next 函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由。

定义中间件函数

可以通过如下的方式,定义一个最简单的中间件函数:

//常量mw所指向的,就是一个中间件函数
const mw = function (req, res, next) {console.log(“这是一个最简单的中间件函数”)//注意:在当前中间件的业务处理完毕后,必须调用 next()的数
//表示把流转关系转交给下一个中间件或路由
next()
}

全局生效的中间件

客户端发起的任何请求,到达服务器之后,都会触发的中间件,叫做全局生效的中间件。

通过调用 app.use(中间件函数),即可定义一个全局生效的中间件,示例代码如下:

//常量mw所指向的,就是一个中间件函数
const mw = function (req, res, next) (
console.log(“这是一个最简单的的中间件函数')
next()
}//全局生效的中间件
app.use(mw);

定义全局中间件的简化形式

//全局生效的中间件
app.use(function (req. res, next) (
console.log(“这是一个最简单的中间件函数数”)
next();
})

局部生效的中间件

不使用 app.use0 定义的中间件,叫做局部生效的中间件,示例代码如下:

//定义中间件函数 mw1
const mw1 = function(req, res, next) {console.log('这是中间件函数')
next()}//mw1 这个中间件只在”当前路由中生效”,这种用法属于“局部生效的中间件“
app.get('/',mw1, function(req, res){res.send('Home page.')})
//mw1 这个中间件不会影响下面这个路由,
app.get('/user', function(req, res) { res.send('User page.') })

定义多个局部中间件

可以在路由中,通过如下两种等价的方式,使用多个局部中间件:

//以下两种写法是“完全等价"的,可根据自己的喜好,选择任意一种方式进行使用
app.get('/',mw1,mw2, (req,res) =>{ res.send('Home page.')}app.get('/', [mw1, mw2], (req, res) => { res.send('Home page.') })

了解中间件的 5 个使用注意事项

① 一定要在路由之前注册中间件

② 客户端发送过来的请求,可以连续调用多个中间件进行处理

③ 执行完中间件的业务代码之后,不要忘记调用 next0 函数

④ 为了防止代码逻辅混乱,调用 next()函数后不要再写额外的代码

⑤ 连续调用多个中间件时,多个中间件之间,共享 req 和 res 对象

中间件的分类

为了方便大家理解和记忆中间件的使用,Express 官方把常见的中间件用法,分成了 5 大类,分别是:

① 应用级别的中间件

② 路由级别的中间件

③ 错误级别的中间件

④Express 内置的中间件

⑤ 第三方的中间件

应用级别的中间件

通过 app.use()或 app.get()或 app.post(),绑定到 app 实例上的中间件,叫做应用级别的中间件,代码示例如下:

//应用级别的中间件(全局中间件)
app.use((req, res, next) => {next()})//应用级别的中间件(局部中间件)
app.get('/', mw1, (req, res) => {res.send('Home page.')})

路由级别的中间件

绑定到 express.Router()实例上的中间件,叫做路由级别的中间件。它的用法和应用级别中间件没有任何区别。只不过,应用级别中间件是绑定到 app 实例上,路由级别中间件绑定到 router 实例上,代码示例如下:

var app = express()
var router = express.Router()//路由级别的中间件
router.use(function (req,res,next) {
console.log('Time:', Date.now())
next()
})app.use('/', router)

错误级别的中间件

错误级别中间件的作用:专门用来捕获整个项目中发生的异常错误,从而防止项目异常崩溃的问题。
格式:错误级别中间件的 function 处理函数中,必须有 4 个形参,形参顺序从前到后,分别是(err,req,res,next)。

app.get('/', function (req, res) {
//路由
throw new Error('服务器内部发生了错误!')// 1.1 抛出一个自定义的错误res.sènd('Home Page.')
})
app.use(function(err,req,res,next){// 2.错误级别的中间件console.log('发生了错误:'+err.message)//2.1 在服务器打印错误消息res.send('Error!'+ err.message)//向客户端响应错误相关的内容
})

Express 内置的中间件

自 Express 4.16.0 版本开始,Express 内置了 3 个常用的中间件,极大的提高了 Express 项目的开发效率和体验:

①express.static 快速托管静态资源的内置中间件,例如:HTML 文件、图片、CSS 样式等(无兼容性)

②express.json 解析 JSON 格式的请求体数据(有兼容性,仅在 4.16.0+版本中可用)

③express.urlencoded 解析 URL-encoded 格式的请求体数据(有兼容性,仅在 4.16.0+版本中可用)

//配置解析 application/json 格式数据的内置中间件app.use(express.json())//配置解析 application/x-ww-form-urlencoded 格式数据的内置中间件app.use(express.urlencoded({ extended: false }))

注意:除了错误级别的中间件,其他的中间件,必须在路由之前进行配置

第三方的中间件

非 Express 官方内置的,而是由第三方开发出来的中间件,叫做第三方中间件。在项目中,大家可以按需下载并配置
第三方中间件,从而提高项目的开发效率。
例如:在express@4.16.0之前的版本中,经常使用 body-parser 这个第三方中间件,来解析请求体数据。使用步
骤如下:

① 运行 npm install body-parser 安装中间件

② 使用 require 导入中间件

③ 调用 app.use() 注册并使用中间件

express-PPT相关推荐

  1. Express Reveal PPT 开发

    课程简介 本课程的理论部分旨在通过全实例,讲解了如何通过 Reveal 开发幻灯片应用程序.实例由浅入深,从最小可运行实例讲起,到实现高级 PPT 功能实现. 最后一篇是重磅内容,将会采用 Node. ...

  2. 基于express和vue框架的校园商品交易平台 答辩PPT免费下载

    今日PPT展示如下:

  3. Nodejs 路由封装 封装一个类似 express 的路由

    1.模块化的方式封装 routes.js: const http = require('http'); const fs = require('fs'); const path = require(' ...

  4. 计算机控制常用数据通信标准,计算机控制数据通信基础要点.ppt

    计算机控制数据通信基础要点.ppt 第2 章 数据通信技术基础 数据通信是为了实现计算机与计算机.计算机与终端之间信息交互而产生的一种通信技术,是计算机与通信相结合的产物. 2.1数据通信概述 2.1 ...

  5. 论文 PPT 画图导出 PDF 注意事项

    为了论文能通过 PDF eXpress 的检查,PPT 导出图片时选择另存为 Adobe PDF,PDF选项全部设置为空.之后可以使用 Adobe Acrobat 检查,具体做法:文件 -> 属 ...

  6. 【IIS小技巧】将IIS Express改成可以通过ip地址访问

    通过浏览器访问的是localhost,如果通过手机访问则需要用ip地址,所以要修改IIS Express的配置,允许通过ip地址访问. IIS Express的配置文件默认在C:\Users\User ...

  7. 【冬瓜哥画PPT】最完整的存储系统接口/协议/连接方式总结

    声明:只要在本页面底部赞赏 2元或以上 者,冬瓜哥便将本文中的配图PPT原稿推送给你,每天晚上在公众号上统一对已打赏的朋友推送原稿.来吧,兄弟们!! 上周,冬瓜哥写过一篇各种存储接口协议总结,不过是篇 ...

  8. 省一级计算机ppt,江苏省计算机一级PPT课件.ppt

    江苏省计算机一级PPT课件 一级计算机信息技术考试辅导 江苏省计算机等级考试辅导一级 信息技术 计算机与软件学院 2010.9 内容提要 江苏省计算机等级考试相关信息说明 一级考试大纲解读 Acces ...

  9. 计算机考试ppt,计算机考试PPT.ppt

    计算机考试PPT.ppt * 使用高级搜索 使用双引号进行精确查找 "rechard marx" 使用逻辑词辅助查找:OR.AND.NOT 有的系统中,空格表示AND,| 表示或者 ...

  10. 关于计算机组装ppt,ENBM_PPT_chap01_V1.3 计算机组装.ppt

    ENBM_PPT_chap01_V1.3 计算机组装.ppt (51页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 组建与维护企业网络第 ...

最新文章

  1. 自己发现的数学规律一
  2. 洛谷 4568 [JLOI2011] 飞行路线
  3. Android 缓存机制
  4. find查找所有php,linux中的find命令—查找文件名
  5. android double转string_Java数组转List的三种方式及对比
  6. 搜索组件_微信连续更新6大功能,“搜索”组件还能带流量
  7. eclipse下properties配置文件中文乱码解决
  8. C++/QT控制通过VISA控制硬件设备,超级容易学会的控制硬件方法
  9. 备查:ASCII码表
  10. 数据质量管理方法有哪些
  11. 用了这么多年Redis,你知道Redis名字的由来吗?
  12. python怎么测试一个网站的延迟_Python检测网络延迟的代码
  13. 关于Mars3D运行步骤以及调接口的问题
  14. ORGE之GUI Demo
  15. arcgis 线段合并
  16. 如何快速定位到网页中某些内容的代码位置
  17. web前端期末大作业 html+css家乡旅游主题网页设计---湖南 登录或注册表单
  18. ppm理解与代码实现
  19. 范宇的Python学习笔记
  20. 计算机图形学--中点椭圆算法原理及代码实现

热门文章

  1. tomcat安装,环境变量配置,以及在eclipse上配置tomcat
  2. 【R语言进阶】不同数值大小的比较
  3. DGIOT国内首家轻量级物联网开源平台——支持远程打印条码/二维码和一码设备全生命周期管理
  4. Excel技能培训之图表展示
  5. MSP430F2111IPWR 超低功耗微控制器 封装:TSSOP20
  6. 威胁建模——围绕假想敌的领域建模
  7. 开发直播软件必须要用直播系统源码才行
  8. 用Python对微信好友进行分析
  9. python实现大疆Tello无人机控制平台并实现语音控制/手势控制/人脸跟踪/绿球跟踪/拍照录像
  10. 未处理 SecurityException,PublicKeyToken=b77a5c561934e089 类型的权限已失败