Loopback 文档翻译第二部分
Routing 路由
1 概览
2 Express 路由总结
3 loopback 路由
Loopback中间件链
加载 中间件
概览
Loopback是建造在express之上的,同时它也实现了express的路由系统。然而基本的express路由系统只是loopback功能上个一小部分。Loopback中大部分的功能是延伸了路由系统得来的。理解这个系统可以帮助你更好的理解loopback同时可以更好地开发loopbackapp。
Express路由系统的总结
对于那些不了解express路由系统的朋友,以下是一些重点的内容:
1 路由是指一些server用来获取请求的规则。路由也是一系列中间件函数,这些中间件函数也正是请求会经过,会被处理的地方。
2 一个中间件只接受三个参数 request, response, 以及在中间件链上,下一个要到达的中间件。(中间件其实是一个个的模块,把中间件链想成一个串联这些模块的链表,那么下一个要到达的中间件就是链表中每个节点保存的指向下一个节点的指针)。
3 你加载中间件的方式可以是使用app.use()或者把这个中间件分配成Route definition里的callbackfunction
4 一些中间件可以被整合成一个路由去处理请求,这些整合在一起的中间件形成了一个中间件链,请求会经过这个链上的每一个中间件,除非有一些中间件终止了这个请求的传播(例如遇到错误返回,请求就不会在到达后面中间件了)
5 链上的任何一个中间件都可以返回response 来终止这个中间件的传递。
6 一个中间件可以调用response的一些方法把response发送回到请求的地方,也可以调用next()把请求传递下去。
7 如果一个中间件发送给服务器response,规定上这个请求就不会再继续传递下去。 在这种情况下任何在调用next传递request的情况都是错误的
8 一个中间价函数也可以接受四个参数,只有在这个中间是一个专门用来处理错误的中间件的情况下。第四个参数是错误信息
更多的细节参照express的路由系统
Loopback的路由
Loopback还是实现的请求路由的中间件模式,所以中间件和路由的概念与express是一致的。Express路由系统已经被包含在loopback的中间件链里了。
Loopback 中间件链
1. initial:before
2. initial
3. initial:after
4. session:before
5. session
6. session:after
7. auth:before
8. auth
9. auth:after
10. parse:before
11. parse
12. parse:after
13. routes:before
15. Components
16. Boot scripts
17. routes
18. routes:after
19. files:before
20. files
21. files:after
22. final:before
23. final
24. final:after
在这个链中越早被加载的中间件可以越早的处理请求,如果在前面的中间件中返回了response 或者没有成功调用next(),请求会被结束在这个中间件不会继续传递
从上面的list中可以看到,loopback会控制中间件加载的顺序,优先与这个中间件相关的其他中间件超过那些已经使用app.use(),bootscript加载过的中间件。
如果你在一个路由以及路由after阶段添加一个中间件。在这个route已经整合好了以后这个中间件不会被执行。
在middleware.json file中配置某个中间件阶段,这个中间件就会被加载。每个阶段的顺序在文件里已经被语义上定义好了,不能够被随机罗列。Loopback也支持你自己定制的阶段。定制的阶段可以被放在中间件链的任何位置,也可以优先于loopback内建的中间件。
Loopback中间件
Loopback中间件使用middleware.json文件,使用app.middleware()方法。
express中间件可以在server.js文件中加载使用app.use()或路由定义加载。
loopback组件可以使用引用loopback应用程序实例加载中间件。
bootscript可以使用参考到Loopback应用程序实例加载中间件。