Angular路由见:Angular路由
今天学习了Angular中的路由,第一次知道了客户端路由的概念,以前的所接触的路由应该称为服务端路由,自己用的比较多的也就是express了
路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。
路由是由一个URI、HTTP请求(GET、POST等)和若干个句柄组成,它的结构如下:app.METHOD(path,[callback……],callback),app是express对象的一个实例,METHOD是一个HTTP请求方法(get、post),path是服务器上的路径(相对路径),callback是当路由匹配时要执行的函数。
下面是一个基本的路由示例:
|
|
路由方法
路由方法源于HTTP请求,和express实例相关联。
下面这个例子展示了为应用跟路径定义的GET和POST请求:
|
|
Express 定义了如下和 HTTP 请求对应的路由方法: get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search, 和 connect。
有些路由方法名不是合规的 JavaScript 变量名,此时使用括号记法,比如: app‘m-search’是一个特殊的路由方法,没有任何http方法与其对应,它的作用是对于一个路径上的所有请求加载中间件。
在下面的例子中,来自”/secret”的请求,不管使用GET、POST、PUT、DELETE或其他任何http模块支持的http请求,句柄都会得到执行。
|
|
路由路径
路由路径和请求方法一起定义了请求的端点,它可以是字符串、字符串模式或者正则表达式。
使用字符串的路由路径示例:
|
|
使用字符串模式的路由路径示例:
|
|
字符 ?、+、* 和 () 是正则表达式的子集,- 和 . 在基于字符串的路径中按照字面值解释。
使用正则表达式的路由路径示例:
|
|
路由句柄
可以为请求处理提供多个回调函数,其行为类似中间件。唯一的区别是这些回调函数有可能调用next(‘route’)方法而略过其他路由回调函数。可以利用该机制为路由定义前提条件,如果在现有路径上继续执行没有意义,则可将控制权交给剩下的路径。
路由句柄有多种形式,可以是一个函数、一个函数组,或者是两者结合。如下所示:
使用一个回调函数处理路由:
|
|
使用多个回调函数处理路由(记得指定next对象):
|
|
使用回调函数数组处理路由:
|
|
混合使用函数和函数数组处理路由:
响应方法(终结请求-响应循环)
下表中响应对象(res)的方法向客户端返回响应,终结请求响应的循环。如果在路由句柄中一个方法也不调用,来自客户端的请求会一直挂起。
方法 | 描述
— | —
res.download() | 提示下载文件
res.end() | 终结响应处理流程
res.json()| 发送一个JSON格式的响应
res.jsonp()| 发送一个支持JSONP的JSON格式的响应
res.redirect()| 重定向请求
res.render()| 渲染视图模板
res.send()| 发送各种类型的响应
res.sendFile()| 以八位字节流的形式发送文件
res.sendStatus()| 设置响应状态代码,并将其以字符串形式作为响应体的一部分发送
app.route()
可使用app.route()创建路由路径的==链式路由句柄==。由于路径在一个地方指定,这样做有助于==创建模块化的路由,而且减少了代码冗余和拼写错误==。请参考Router()文档了解更多有关路由的信息。
下面这个示例程序使用app.route()定义了链式路由句柄。
|
|
express.Router
==可使用express.Router类创建模块化、可挂载的路由句柄==。Router实例是一个完整的中间件和路由系统,因此常称其为一个”mini-app”。
下面的实例程序创建了一个路由模块,并加载了一个中间件,定义了一些路由,并且将它们挂载至应用的路径上。
在app目录下创建名为bird.js的文件,内容如下:
|
|
然后在应用中加载路由模块:
|
|
应用即可处理发自/birds和/birds/about的请求,并且调用为该路由指定的中间件timeLog。