|
Express 介绍
Express 是一个基于 Node.js 平台,快速、开放、极简的 web 开发框架。 它可以轻松构建各种web应用,例如:
接口服务
传统的web网站
开发工具集成等(例如webpack的devServer)
Express本身是极简的,仅仅提供了web开发的基础功能,但是它通过中间件的方式集成了许许多多的外部插件来处理HTTP请求。
body-parser:解析HTTP请求体
compression:压缩HTTP响应
cookie-parser:解析cookie 数据
cors:处理跨域资源请求
morgan:HTTP请求日志记录
Express中间件的特性固然强大,但是它所提供的灵活性是一把双刃剑。
它让Express本身变得更加灵活和简单
缺点在于虽然有一些中间件包可以解决几乎所有问题或需求,但是挑选合适的包有时也会成为一个挑战
有很多流行框架基于 Express
Express 官网
express 安装
参考文档:http://expressjs.com/en/starter/installing.html
1
2
3
4
5
6
7
8
9 # 创建并切换到 myapp 目录
mkdir myapp
cd myapp
# 初始化 package.json 文件
npm init -y
# 安装 express 到项目中
npm i express
Hello World
1 | // 0. 加载 Express |
基本路由
参考文档:http://expressjs.com/en/starter/basic-routing.html
路由(Routing)是由一个 URI(或者叫路径标识)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何处理响应客户端请求。
每一个路由都可以有一个或者多个处理器函数,当匹配到路由时,这个/些函数将被执行。
路由的定义的结构如下:
1 | app.METHOD(PATH, HANDLER); |
● app 是 express 实例
● METHOD 是一个 HTTP 请求方法
● PATH 是服务端路径(定位标识)
● HANDLER 是当路由匹配到时需要执行的处理函数
举例
1 | // 当你以 GET 方法请求 / 的时候,执行对应的处理函数 |
路由路径
路由路径与请求方法结合,定义了可以进行请求的端点。路由路径可以是字符串,字符串模式或正则表达式。字符?,+,*,和()是他们的正则表达式的对应的子集。连字符(-)和点(.)由基于字符串的路径按字面意义进行解释。
如果您需要$在路径字符串中使用美元字符(),请将其转义([并括在和中]) 例如,“/data /$book”处用于请求的路径字符串将为$
Express使用path-to-regexp来匹配路由路径; 有关定义路由路径的所有可能性,请参见正则表达式路径文档。Express Route Tester尽管不支持模式匹配,但却是用于测试基本Express路由的便捷工具。
● *查询字符串不是路由路径的一部分。
动态路径
1 | app.get("/users/:userId/books/:bookId", function(req, res) { |
路径参数
路由参数被命名为URL段,用于捕获URL中在其位置处指定的值。捕获的值将填充到req.params对象中,并将路径中指定的route参数的名称作为其各自的键。
1 | Route path: /flights/ :from-:to |
路径参数的名称必须由“文字字符”([A-Za-zO-9_])组成。
由于连字符(-)和点(.)是按字面解释的,因此可以将它们与路由参数一起使用,以实现有用的目的。
1 | Route path : /plantae/ :genus.:species |
路由处理方法
app.route()
express.Router
1 | onst express = require("express"); |
在 Express 中获取客户端请求参数的三种方式
例如,有一个地址:/a/b/c?foo=bar&id=123
查询字符串参数
1 | console.log(req.query); |
请求体参数
POST 请求才有请求体,我们需要单独配置 body-parser 中间件才可以获取。
只要程序中配置了 body-parser 中间件,我们就可以通过 req.body 来获取表单 POST 请求体数据。
1 | req.body |
动态的路径参数
在 Express 中,支持把一个路由设计为动态的。例如:
1 | // /users/:id 要求必须以 /users/ 开头,:id 表示动态的,1、2、3、abc、dnsaj 任意都行 |
请求和响应
Express应用使用路由回调函数的参数:request和response 对象来处理请求和响应的数据。
Express不对Node.js 已有的特性进行二次抽象,只是在它之上扩展了web应用所需的基本功能。
● 内部使用的还是 http 模块
● 请求对象继承自: http.IncomingMessage
● 响应对象继承自: http.ServerResponse
处理静态资源
1 | // 开放 public 目录中的资源 |