Skip to content

Vercel 部署依然404:/api/v1/meta 和 /api/v1/packages 路由未生效且 broker 未挂载 #932

Description

@hotlong

复现问题描述

在 Vercel 上部署 ObjectStack Studio 后,/api/v1/meta/api/v1/packages 路由依然返回 404,控制台持续报错,前端核心元数据与包列表接口不可用。

客观现象

  • 访问 https://play.objectstack.ai/api/v1/meta 与 /api/v1/packages 返回 404
  • 控制台日志 [Console] Starting in Server mode,尝试 fetch /api/v1/packages 与 /api/v1/meta
  • HTTP response 多次 404 (Not Found)
  • 页面无法加载核心功能

深度分析

  1. Hono 路由 catch-all 实际是注册了,但 Vercel path prefix 很可能导致路径未命中
    • Vercel 的 /api/[...path].ts 路由和内部 createHonoApp 的 prefix /api/v1 可能双重叠加,或者存在被截断。
    • 若请求传递路径为 /v1/meta,但 Hono 注册路径为 /api/v1/meta,则完全无法匹配,直接 404。
  2. dispatcher.dispatch() 已覆盖 meta/packages 路由,问题多半在于 serverless 环境路径偏移。
  3. broker shim 挂载虽有实现,但 cold start 时 kernel/app 启动失败未捕获,可能直接甩 500,或者 broker 为 null 抛异常。
  4. handleMetadata/handlePackages 方法直接 ensureBroker(),一旦 broker 未挂载或初始化失败,会抛 500。

结论

推荐修复与长期方案

  1. 在 serverless handler 层打印路径/日志,定位请求 path 是否被修正或被截断。
  2. 梳理 prefix 和 handler注册,防止内部 Hono prefix 与 Vercel catch-all 产生双重前缀或错配。
  3. kernel/app 的初始化需要更健壮,所有异常都应有日志、并降级到健康提示,不应静默挂死。
  4. broker shim 强制挂载与 broker 相关依赖初始化需全程校验,并应支持无 broker 降级兼容。
  5. 补充 Vercel/serverless 路由端到端 e2e 测试用例。

相关分析已在 #930 提供,可附引用。

cc @hotlong

Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions