Request 生命周期

介绍

JavaScript 是异步的。对于初学者来说,很难理解它是如何工作的,以及如何处理它对应用程序流的非阻塞方法。

区分为前端编写的 JavaScript 和为后端编写的 JavaScript 也可能令人困惑。它们在语法上是相同的,但是不在相同的 run-time 和 context 中运行。

如果你对 Request 生命周期有一个更高层次的概念,那么你将觉得 AdonisJs 不那么“神奇”,并且你在构建应用程序时会更有信心。

Request Flow

从客户机发送的 HTTP Request 由 AdonisJs 服务器模块处理,执行所有服务器级别的中间件(例如, StaticFileMiddleware 服务于 public 目录中的静态文件)。

如果 Request 没有被服务器级中间件终止,AdonisJs 路由器就会发挥作用。它试图找到与 Request 的 URL 匹配的路由。如果路由器找不到匹配项,将抛出一个 RouteNotFound 异常。

在找到匹配的路由之后,所有全局中间件都被执行,然后是为匹配路由定义的任何局部中间件。如果没有全局或局部的中间件终止 Request ,则调用匹配的路由处理程序。

你必须终止路由处理程序中的 Request ,一旦终止, AdonisJs 将执行所有下游中间件并将响应发送回客户端。

HTTP Context

AdonisJs 为每个路由处理程序提供一个 HTTP Context 对象。

该对象包含处理 Request 所需的所有内容,比如 Request 或响应类,可以通过 provider 或 middleware 轻松扩展:

Route.get('/', ({ request, response, view }) => {
  // request
  // response
  // view
})

或者,你可以直接使用它,而不是打开它:

Route.get('/', (ctx) => {
  // ctx.request
  // ctx.response
  // ctx.view
  // etc
})

最后一次更新: 6/25/2019, 10:09:39 PM