在 Web 应用程序中,路由是一个核心概念。它们是定义 URL 如何转译到应用程序中的操作和行为的一种方法。HapiJS 是一种 Node.js 框架,它提供了一个强大的路由系统,可以让你很容易地将请求路由到正确的处理程序中。在这篇文章中,我们将深入探讨 HapiJS 的路由系统。
HapiJS 路由系统概述
在 HapiJS 中,路由是由一个对象表示的,每一个对象都有一个 HTTP 方法、一个 URL 和一个处理程序。路由对象用于将请求映射到正确的处理程序中。下面是一个路由对象的基本结构:
{ method: 'GET', path: '/hello', handler: function (request, h) { return 'Hello World!'; } }
这个路由对象表示一个 GET 请求,当访问 URL 为 /hello
时,它的处理程序将返回 "Hello World!"
。
HapiJS 路由定义
在 HapiJS 中定义路由有两种方式。一种是使用 server.route()
方法,另一种是在创建服务器实例时使用 routes
选项。
server.route()
方法
使用 server.route()
方法可以为服务器添加单个或多个路由。下面是一个例子:
server.route({ method: 'GET', path: '/hello/{name}', handler: function (request, h) { const name = request.params.name; return `Hello ${name}!`; } });
这个路由定义了一个 GET 请求,当访问 URL 为 /hello/{name}
时,它的处理程序将返回 "Hello {name}!"
,其中 {name}
是一个占位符,表示将在 URL 中传入一个 name 参数。
server.route()
方法也可以接受一个路由对象数组。下面是一个定义了两个路由的例子:
-- -------------------- ---- ------- -------------- - ------- ------ ----- ---------------- -------- -------- --------- -- - ----- ---- - -------------------- ------ ------ ---------- - -- - ------- ------ ----- ----------- -------- -------- --------- -- - ------ ----------- - - ---
routes
服务器选项
在创建服务器实例时可以通过 routes
选项设置路由。下面是一个例子:
-- -------------------- ---- ------- ----- ------ - ------------- ----- ----- ----- ------------ ------- - - ------- ------ ----- ---------------- -------- -------- --------- -- - ----- ---- - -------------------- ------ ------ ---------- - -- - ------- ------ ----- ----------- -------- -------- --------- -- - ------ ----------- - - - ---
在这个例子中,我们通过 routes
选项将路由添加到服务器实例中。
路由参数
在 HapiJS 中,路由可以包含参数。参数可以是路径参数、查询字符串参数或有效载荷(payload)参数。下面分别介绍这三种类型的参数。
路径参数
路径参数是路由路径中的占位符。下面是一个例子:
server.route({ method: 'GET', path: '/hello/{name}', handler: function (request, h) { const name = request.params.name; return `Hello ${name}!`; } });
在这个例子中,/hello/{name}
中的 {name}
是一个路径参数。当访问 URL 为 /hello/world
时,request.params.name
的值将为 'world'
。
查询字符串参数
查询字符串参数是在 URL 中通常以 ?
开头的键值对。下面是一个例子:
server.route({ method: 'GET', path: '/search', handler: function (request, h) { const query = request.query; return `Search query: ${JSON.stringify(query)}`; } });
在这个例子中,我们定义了一个 GET 请求,当访问 URL 为 /search?query=hapijs
时,request.query
的值将为 {query: 'hapijs'}
。
有效载荷参数
有效载荷参数是在 POST 或 PUT 请求中发送的数据。下面是一个例子:
server.route({ method: 'POST', path: '/users', handler: function (request, h) { const user = request.payload; return `Created user: ${JSON.stringify(user)}`; } });
在这个例子中,我们定义了一个 POST 请求,当访问 URL 为 /users
时,我们将 user
对象作为有效载荷发送到服务器。request.payload
将包含传递的对象。
路由插件
路由插件是 HapiJS 的另一个强大功能。它可以让你将源代码分离成许多小的部分,以便更好地组织和重用代码。下面是一个例子:
-- -------------------- ---- ------- ----- ------------ - -------- --------- -- - ----- ---- - -------------------- ------ ------ ---------- -- ----- -------------- - -------- --------- -- - ------ ----------- -- ----- ----------- - - ----- --------------- -------- -------- --------- -------- -------- -------- - -------------- ------- ------ ----- ---------------- -------- ------------ --- - -- ----- ------------- - - ----- ----------------- -------- -------- --------- -------- -------- -------- - -------------- ------- ------ ----- ----------- -------- -------------- --- - -- ----- ------ - ------------- ----- ----- ----- ------------ ------- - -------- - ------------ --- -------------- -- - - --- ----------------------------- --------------- -------- -- - -------------------- -------------- -- ------------ -- - ------------------ ----------- ---------- ----- ---
在这个例子中,我们定义了两个路由插件。每个插件包含一个路由定义和一个注册函数。注册函数将路由定义添加到服务器中。最后,我们通过 server.register()
方法将插件注册到服务器中。
结论
在本文中,我们学习了 HapiJS 路由系统的基础知识。我们讨论了路由对象的结构、路由定义的两种方式以及如何使用路径参数、查询字符串参数和有效载荷参数。最后,我们还介绍了路由插件的使用。通过深入学习 HapiJS 路由系统,您可以编写更好的 Web 应用程序,并使其更易于维护。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66ef779f6fbf9601972f6723