Hapi 是一个用于构建 web 应用程序和服务的 Node.js 框架,它提供了一套强大的 API 和工具,使开发者可以快速构建安全、可靠、可扩展的应用程序。最近,Hapi 推出了 18.1.0 版本,本文将介绍此版本的更新日志及相关说明。
更新日志
以下是 Hapi 18.1.0 版本的更新日志:
新功能
添加了
server.inject()
方法的onEnd
选项。该选项允许开发者在请求完成后执行一些操作,例如记录请求信息或清理资源。添加了
server.lookup()
方法,该方法允许开发者根据请求的路径查找路由信息。添加了
server.realm.modifiers.route.prefix
配置选项,该选项允许开发者为路由设置前缀。添加了
router.route()
方法,该方法允许开发者手动添加路由。添加了
route.auth.access()
方法,该方法允许开发者在路由级别上设置访问控制。添加了
route.auth.scope
配置选项,该选项允许开发者在路由级别上设置访问权限。
修复
修复了
response.isBoom
属性在某些情况下返回错误的问题。修复了在某些情况下无法访问
server.realm
属性的问题。修复了在某些情况下无法使用
server.realm.modifiers.route.prefix
配置选项的问题。修复了在某些情况下无法使用
route.auth.access()
方法的问题。
相关说明
server.inject()
方法的 onEnd
选项
server.inject()
方法是 Hapi 框架中用于模拟请求的方法,可以用于测试路由和处理程序的行为。在 18.1.0 版本中,server.inject()
方法新增了 onEnd
选项,该选项可以用于在请求完成后执行一些操作。例如,我们可以使用 onEnd
选项记录请求信息:
// javascriptcn.com 代码示例 const server = Hapi.server(); server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello World!'; } }); server.inject( { method: 'GET', url: '/' }, (res) => { console.log(`Response status code: ${res.statusCode}`); }, { onEnd: (req, res) => { console.log(`Request method: ${req.method}`); console.log(`Request URL: ${req.url}`); console.log(`Response status code: ${res.statusCode}`); }} );
在上面的示例中,我们在 server.inject()
方法中设置了 onEnd
选项,该选项接收两个参数:req
和 res
,分别表示请求和响应。在 onEnd
方法中,我们可以记录请求的方法、URL 和响应的状态码。
server.lookup()
方法
server.lookup()
方法可以根据请求的路径查找路由信息。例如,我们可以使用 server.lookup()
方法获取 /users
路径的路由信息:
// javascriptcn.com 代码示例 const server = Hapi.server(); server.route({ method: 'GET', path: '/users', handler: (request, h) => { return 'List of users'; } }); const route = server.lookup('GET', '/users'); console.log(route.path); // /users
在上面的示例中,我们使用 server.lookup()
方法获取了 /users
路径的路由信息,并输出了路由的路径。
server.realm.modifiers.route.prefix
配置选项
server.realm.modifiers.route.prefix
配置选项可以用于为路由设置前缀。例如,我们可以使用 server.realm.modifiers.route.prefix
配置选项为路由设置 /api
前缀:
// javascriptcn.com 代码示例 const server = Hapi.server(); server.realm.modifiers.route.prefix = '/api'; server.route({ method: 'GET', path: '/users', handler: (request, h) => { return 'List of users'; } }); server.start();
在上面的示例中,我们使用 server.realm.modifiers.route.prefix
配置选项为路由设置了 /api
前缀,因此 /users
路径实际上是 /api/users
。注意,server.realm.modifiers.route.prefix
配置选项是在服务器级别上设置的,因此所有路由都会受到影响。
router.route()
方法
router.route()
方法可以用于手动添加路由。例如,我们可以使用 router.route()
方法手动添加一个路由:
// javascriptcn.com 代码示例 const server = Hapi.server(); const router = server._core.router; router.route({ method: 'GET', path: '/users', handler: (request, h) => { return 'List of users'; } }); server.start();
在上面的示例中,我们使用 server._core.router
获取了路由器对象,并使用 router.route()
方法手动添加了一个路由。使用 router.route()
方法时,需要传入一个包含路由信息的对象,包括方法、路径和处理程序。
route.auth.access()
方法
route.auth.access()
方法可以用于在路由级别上设置访问控制。例如,我们可以使用 route.auth.access()
方法设置只有管理员才能访问 /admin
路径:
// javascriptcn.com 代码示例 const server = Hapi.server(); server.route({ method: 'GET', path: '/admin', handler: (request, h) => { return 'Admin page'; }, config: { auth: { access: { scope: ['admin'] } } } }); server.start();
在上面的示例中,我们在路由的配置对象中添加了 auth
属性,并在 auth
属性中设置了 access
属性。access
属性包含一个 scope
属性,该属性设置了访问权限。在这个例子中,只有具有 admin
权限的用户才能访问 /admin
路径。
route.auth.scope
配置选项
route.auth.scope
配置选项可以用于在路由级别上设置访问权限。例如,我们可以使用 route.auth.scope
配置选项设置只有具有 admin
权限的用户才能访问 /admin
路径:
// javascriptcn.com 代码示例 const server = Hapi.server(); server.route({ method: 'GET', path: '/admin', handler: (request, h) => { return 'Admin page'; }, config: { auth: { scope: ['admin'] } } }); server.start();
在上面的示例中,我们在路由的配置对象中添加了 auth
属性,并在 auth
属性中设置了 scope
属性。scope
属性设置了访问权限,只有具有 admin
权限的用户才能访问 /admin
路径。
总结
Hapi 18.1.0 版本的更新日志中新增了许多有用的功能和修复了一些问题。其中,server.inject()
方法的 onEnd
选项和 server.lookup()
方法特别值得关注。此外,server.realm.modifiers.route.prefix
配置选项、router.route()
方法、route.auth.access()
方法和 route.auth.scope
配置选项也可以让开发者更方便地构建安全、可靠、可扩展的应用程序。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/655ecc08d2f5e1655d8f239f