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

Deno使用Oak框架时ctx.request.body()属性不存在deno-ts错误如何解决

问题原因说明

这个TypeScript报错的本质是你把await用错了位置:你使用的oak v9.0.1版本中,ctx.request.body()是同步方法,直接返回请求体容器对象,真正需要异步等待解析的是容器的value属性。你原代码错误地await了ctx.request.body()本身,直接去解构value下的自定义属性,而value此时还是未解析的Promise/FormDataReader等类型,自然不存在name/email/password这类字段。

修复方案

两处报错的代码写法完全一致,统一修改即可,共有两种可行写法:

写法1:直接解析value

将原代码:

const { value: { name, email, password } } = await ctx.request.body();

替换为:

// ctx.request.body是同步方法,不需要await,真正需要await的是value属性
const { value } = ctx.request.body();
const { name, email, password } = await value;

写法2:显式指定解析类型(更稳妥,避免非JSON请求报错)

如果你的接口只接收JSON格式的请求参数,建议显式指定解析类型,代码更易维护:

// 显式指定解析为JSON格式,避免收到表单/二进制请求时报错
const body = await ctx.request.body({ type: "json" }).value;
const { name, email, password } = body;
额外注意事项

你当前登录逻辑中每次请求都生成新的HMAC密钥用来签发JWT,后续接口验证JWT时无法复用这个临时生成的密钥,会导致所有JWT都验证失败。建议将JWT密钥存在环境变量中,全局使用固定密钥签发和验证JWT。

内容的提问来源于stack exchange,提问作者user11874694

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:36:03