在 Deno 中使用中间件是非常方便和容易的。中间件是在 HTTP 请求的特定点上执行的函数。Den中间件可以用于在路由之前或之后执行某些任务,如身份验证、日志记录、错误处理等。在这篇文章中,我们将深入探讨如何在 Deno 中使用中间件。
定义中间件
一个中间件实际上是一个函数,它接受一个 Request
和一个 Next
参数。 Request
是一个封装了 HTTP 请求信息的对象,而 Next
则是一个指向下一个中间件的引用。
我们可以使用类似下面的方式定义中间件函数:
function middleware(request: Request, next: Next): Promise<Response> { // middleware logic return next(request); }
在这个示例中,我们只是简单地执行了一些中间件逻辑,然后将请求传递给下一个中间件。
使用中间件
要使用中间件,我们需要创建一个类似如下的 HTTP 服务器:
import { serve } from "https://deno.land/std/http/server.ts"; const server = serve({ port: 8080 }); for await (const request of server) { // handle request }
要使用中间件,我们只需要将中间件函数添加到处理请求时的 for 循环中:
for await (const request of server) { await middleware(request, async (req: Request) => { const response = await handleRequest(req); // do something with the request request.respond(response); }); }
在这个示例中,我们将 handleRequest
函数传递给中间件。它将使用请求执行某些处理,然后返回结果。
中间件执行顺序
中间件的执行顺序由添加的顺序决定。例如,在下面的示例中,middleware1
将在 middleware2
之前执行,因为 middleware1
添加到了 for 循环中的顶部。
for await (const request of server) { await middleware1(request, async (req: Request) => { await middleware2(req, async (req2: Request) => { const response = await handleRequest(req2); request.respond(response); }); }); }
示例
下面是一个完整的示例,其中包含两个中间件:
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ----- ------ - ------- ----- ---- --- -------- ---------------------- -------- ----- ------ ----------------- - --------------------- ------- --- ----------------- ------ -------------- - -------- ------------------------ -------- ----- ------ ----------------- - ------ --------------------------- -- - ------------------- ------------------- ----- -------- - --- ------------------ ------ ------- - ------- --- --- ------ --------- --- - ----- -------- ---------------------- --------- ----------------- - -- --------------- --- ----- -- ----------- --- --------- - ------ --- --------------- --------- - ---- - ------ --- -------------- - ------- --- --- - - --- ----- ------ ------- -- ------- - ----- ---------------------- ----- ----- -------- -- - ----- -------------------- ----- ------ -------- -- - ----- -------- - ----- -------------------- -------------------------- --- --- -
在这个示例中,我们定义了两个中间件:logMiddleware
和 errorMiddleware
。 logMiddleware
将记录收到的每个请求的 URL,而 errorMiddleware
将捕获任何错误并返回 500 内部服务器错误。
然后,我们定义一个处理函数 handleRequest
,它将根据请求返回不同的响应。如果请求是 GET,并且 URL 是 /hello
,它将返回 Hello World!
。否则,它将返回 404 响应。
最后,我们将中间件添加到 for 循环中,以记录日志和处理错误。我们还将 handleRequest
函数作为中间件参数传递。
结论
在 Deno 中使用中间件是一种在 HTTP 请求的不同阶段进行一些通用处理的好方法。在这篇文章中,我们介绍了如何定义中间件,如何在 HTTP 服务器上使用中间件,以及中间件的执行顺序。我们还演示了一个完整的示例,其中包含两个中间件,以帮助您理解中间件的实际用途。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670614a2d91dce0dc857ec2f