You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将路由配置参数传递给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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:27:02