创建Hasura一次性定时事件时遭遇'resource does not exist'错误求助
错误原因排查与解决办法
核心错误分析
你遇到的not-found + resource does not exist错误,本质是请求的资源路径不存在,结合你的代码和Hasura的API规范,主要有以下几个可能的原因:
1. 请求URL错误
Hasura的定时事件创建接口并非/v1/graphql/query(这个是GraphQL数据查询/修改的端点),定时事件属于元数据操作,正确的API端点是/v1/events/schedule。
2. 请求数据处理不当
你的代码中使用了JSON.stringify(schedule_event),但Axios在发送POST请求时,若传入对象作为data,会自动将其序列化为JSON并设置正确的Content-Type: application/json头,手动序列化反而可能导致格式识别问题。
3. 定时事件结构不符合要求
如果schedule_event对象缺少必填字段(如trigger_name、schedule、webhook),也可能导致接口无法识别请求,但优先排查URL问题。
解决步骤
1. 修正请求URL
将请求地址改为Hasura定时事件的正确端点:
const add_event = await axios("http://localhost:8080/v1/events/schedule", { method: "POST", data: schedule_event, // 直接传对象,无需JSON.stringify headers: { "x-hasura-admin-secret": process.env.HASURA_ADMIN_SECRET, }, });
2. 确保schedule_event结构正确
一个合法的定时事件请求体示例如下:
const schedule_event = { trigger_name: "weekly_invoice_sync", // 唯一触发器名称 schedule: "0 0 * * 0", // Cron表达式(每周日凌晨执行) payload: { tenant_id: "abc123" }, // 传递给webhook的参数 webhook: "https://your-service.com/process-invoice", // 事件触发时调用的接口 headers: { "Content-Type": "application/json" }, // 可选,自定义请求头 retry_conf: { // 可选,重试配置 num_retries: 3, retry_interval_seconds: 60 } };
3. 验证Hasura基础配置
- 确认Hasura控制台的Events功能已启用(默认启用,若被禁用需在
Settings中开启)。 - 检查
x-hasura-admin-secret是否与Hasura实例配置的一致。
内容的提问来源于stack exchange,提问作者Felix Atlas
相关产品推荐
相关产品推荐

