如何将路由配置参数传递给hapijs插件,读取值为undefined如何解决?
问题根因
- 你选择的
onRequest生命周期扩展点执行时机过早:该阶段是Hapi接收请求后的第一个执行节点,此时还未完成路由匹配逻辑,request.route指向的是默认的404兜底路由,自然无法读取你在自定义路由上配置的plugins.permissions参数。
解决方案
将扩展点替换为路由匹配完成后的生命周期节点即可,做权限校验通常推荐用 onPreAuth(认证逻辑执行前)或者 onPostAuth(认证逻辑执行后)。
修改后的插件代码如下:
import { Server, Request } from "@hapi/hapi" declare module "@hapi/hapi" { export interface PluginSpecificConfiguration { permissions: string[] } } const permissions = () => { return { plugin: { name: "permissions", register: async (app: Server) => { // 将onRequest替换为onPreAuth即可 app.ext("onPreAuth", (request: Request, h) => { Log.info( `permissions: ${request.route.settings.plugins?.permissions}`, ) return h.continue }) }, }, } } export default async ({ app }: { app: Server }) => { app.register(permissions()) }
额外排查点
如果修改后还是无法读取,可以确认两个配置:
- 路由的注册顺序晚于权限插件的注册顺序
- 路由配置的
options.plugins.permissions层级没有写错,你当前的路由配置层级是正确的
内容的提问来源于stack exchange,提问作者Peter Hall
相关产品推荐
相关产品推荐

