栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

express学习 - (2)express 路由

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

express学习 - (2)express 路由

express学习 (2)
express 路由

作者: 李俊才

CSDN主页:jcLee95

邮箱:291148484@163.com


任务

  • 理解 路由 概念的含义;
  • 掌握 HTTP 请求的类型;
  • 掌握 HTTP 响应状态码及其含义;
  • 掌握 expess 框架实现路由的方式;
1. 路由 1.1 路由的基本概念

路由是指确定应用程序如何响应客户端对特定端点的请求,这个端点是URI(或路径)和特定的HTTP请求方法(GET、POST等)。每个路由可以有一个或多个处理函数,当路由匹配时执行这些函数。

1.2 统一资源定位系统(uniform resource locator;URL)

URL
统一资源定位系统(uniform resource locator;URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。其格式一般满足如下规则:

//<用户名>:<密码>@<主机>:<端口>/

URL有很多不同的子类型,如Gopher URL、FTP URL、mailto URL、WAIS URL、File URL、HTTP URL、Prospero URL等。

HTTP URL
HTTP URL 方案是用来标志因特网上使用HTTP(HyperText Transfer Protocol,超文本传输协议)的可达资源。HTTP协议在其他的地方进行了详细说明。本文只介绍了HTTP URL的语法。HTTP URL的形式如下:

http://:/?

是一个HTTP选择器,是查询字符串。,和它前面的“?”都是可选择的。如果部分都没有,则“/”也可以省略。部分中的“/”,“;”和 “?”都是保留字符。“/”字符可以在HTTP中用来表示层次结构。
在互联网Web项目中,我们一般通过 HTTP/HTTPS 进行通信,这就需要使用 HTTP URL 来定位所请求资源的位置。在服务器端我们使用“路由”的实质也就是在位不同的资源(包含信息等)设定一个具体的URL路径。

2. HTTP请求 2.1 HTTP请求的类型

HTTP 请求可以使用多种请求方法

编号请求方式说明
1GET请求指定的页面信息,并返回实体主体。
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的文档的内容。
5DELETE请求服务器删除指定的页面。
6CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要用于测试或诊断。
9PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。
2.2 HTTP请求的状态码 2.2.1 HTTP状态码的分类

HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型,各种类型及其含义如下:

分类分类描述
1XX信息,服务器收到请求,需要请求者继续执行操作
2XX成功,操作被成功接收并处理
3XX重定向,需要进一步的操作以完成请求
4XX客户端错误,请求包含语法错误或无法完成请求
5XX服务器内部错误,服务器在处理请求的过程中发生了错误
2.2.2 所有HTTP状态码

HTTP状态码表:

状态码状态码英文名称中文描述
1XX消息---------------------------------------------------------------------------------------------------------------
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
2XX成功---------------------------------------------------------------------------------------------------------------
200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
3XX重定向---------------------------------------------------------------------------------------------------------------
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
4XX请求错误---------------------------------------------------------------------------------------------------------------
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
5XX服务器错误---------------------------------------------------------------------------------------------------------------
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理
3. express中路由的定义方法 3.1 路由的匹配 3.1.1 定义完整的express路由

这是最简单、朴素的定义方式,也就是将路由完整地写完。只有在路由及其简单的时候我们才会采取这样的方式,例如一般情况下路由为主页时,我们定义主页的路由为"/"。

3.1.2 定义包含模糊匹配的express路由

express支持使用?、+、()、*等等符号进行模糊匹配。例如:

  • "/ab?c" 可以匹配/ac和/abc,?号表示前一个字符既可以有也可以没有;
  • "/a(bc)?d" 可以匹配/ad和/abcd,一对小括号()用于将一部分字符串视为一个整体;
  • "/ab+c" 可以匹配/abc、/abbc、/abbbc…,+号表示有任意多个前一个字符;
  • "/ab*c" 可以匹配/ab91wd等,通配符*可以表示匹配任意的字符或者字符串;
3.1.3 在express路由中使用正则表达式

express路由中是支持直接使用正则表达式的,比如/abc/能够匹配路径中包含abc字符串的任何内容,如/abc、aabc、abcd等等。
【实例】正则匹配字符串/abc 和 /xyz:

app.use(//abc|/xyz/, function (req, res, next) {
  next()
})
3.1.4 使用数组来同时定义多个路由规则

【实例】使用数组来匹配多个规则:

app.use(['/abcd', '/xyza', //lmn|/pqr/], function (req, res, next) {
  next()
})
3.2 基于不同HTTP请求的路由
var express = require('express');             // 引入express
var router = express.Router();                // 引入express路由对象
3.2.1 GET请求

【例如】:

router.get('/'), function(req, res, next){
  res.render('index', {title:'Express'})
}
3.2.2 POST请求

【例如】:

router.post('/testpost'), function(req, res, next){
  res.render('index', {msg:'some info'})        // 渲染`index`视图
}
3.2.3 DELETE请求

【例如】:

router.delete('/'), function(req, res, next){
  res.render('index', {msg:'some info'})        // 渲染`index`视图
}
3.2.4 PUT请求

【例如】:

router.put('/testput'), function(req, res, next){
  res.render('index', {msg:'some info'})        // 渲染`index`视图
}
4. 请求对象与返回对象 4.1 请求对象Request

req对象表示 HTTP 请求并具有请求查询字符串、参数、正文、HTTP 标头等的属性。在本文档中,按照惯例,对象始终被称为req(并且 HTTP 响应是res),但其实际名称由您正在使用的回调函数的参数确定。

属性含义解释
Request.url获取请求地址
Request.query获取GET请求参数
Request.body获取POST请求参数
Request.params获取URL中的自定义参数
Request.headers获取请求头数据
Request.cookies获取客户端cookie
4.2 返回对象Response

res对象表示 Express 应用在收到 HTTP 请求时发送的 HTTP 响应。

方法描述说明
Response.render()渲染页面他有3个参数,
· view(必须),是一个字符串,表示用于渲染的文件名(相对路径);
·local(可选),是一个对象,为属性定义页面的局部变量;
·callback(可选),是一个函数,为回调函数。返回可能的错误和呈现的字符串,但不执行自动响应。发生错误时,该方法在next(err)内部调用。
Response.send()发送HTTP响应该方法发送一个HTTP响应给请求端,可以接收一个参数,并且该参数可以是任何类型。比如一个Buffer对象、一个字符串、一个对象,或者一个数组。如res.send(new Buffer('hellow'));,再如res.send('some string'),又如res.send({key:'value'})
Response.json()返回JSON格式的字符串数据例如res.json({name:'JACK'}),我们传入的是一个js对象,但通过json()方法,它将自动地被转换为一个JSON格式的字符串通过HTTP发送给请求方。
Response.status()设定HTTP状态码如res.status(403).end(),这时在Postman中可以看到返回的状态码时403。
Response.redirect()跳转指定的路由如res.redirect('/home')。
5. express中间件(Middleware)的概念

中间件并不是单独属于路由这一部分的概念,但是我们在此处已经用到了express为我们提供的一些中间件,因此有必要提前介绍一些中间件的概念。从功能上看,中间件是一些处理方法的合集,express也就是一个路由和各种中间件合成的Web框架。

由express官方团队维护的中间件

中间件模块描述替代内置功能 (Express 3)安装方式引入模块
body-parser解析HTTP请求正文。express.bodyParsernpm install body-parservar bodyParser = require('body-parser')
compression压缩HTTP响应。express.compressnpm install compressionvar compression = require('compression')
connect-rid生成唯一的请求标识ID。NAnpm install connect-ridvar rid = require('connect-rid');
cookie-parser解析cookie头并填充req.cookies。express.cookieParsernpm install cookie-parservar cookieParser = require('cookie-parser')
cookie-session建立基于cookie的会话。express.cookieSessionnpm install cookie-sessionvar cookieSession = require('cookie-session')
cors通过各种选项实现跨来源资源共享(CORS)。NAnpm install corsvar cors = require('cors')
csurfCSRF防护。express.csrfnpm install csurfvar csurf = require('csurf')
errorhandler开发错误处理/调试。express.errorHandlernpm install errorhandlervar errorhandler = require('errorhandler')
method-override使用header重写HTTP方法。express.methodOverridenpm install method-overridevar methodOverride = require('method-override')
morganHTTP 请求 日志器.express.loggernpm install morganvar morgan = require('morgan')
multer处理多部分表单数据。express.bodyParsernpm install --save multervar multer = require('multer')
response-time记录HTTP响应时间。express.responseTimenpm install response-timevar responseTime = require('response-time')
serve-favicon提供图标。express.faviconnpm install serve-faviconnpm install serve-favicon
serve-index为给定路径提供目录列表。express.directorynpm install serve-indexvar serveIndex = require('serve-index')
serve-static提供静态文件。express.staticnpm install serve-staticvar serveStatic = require('serve-static')
session建立基于服务器的会话(仅限开发)。express.sessionnpm install express-sessionvar session = require('express-session')
timeout为HTTP请求处理设置超时期限。express.timeoutnpm install connect-timeoutvar timeout = require('connect-timeout')
vhost创建虚拟域(domains)。express.vhostnpm install vhostvar vhost = require('vhost')
6. 测试路由(简单使用Postman)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274804.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号