Deno Oak测试/api/register报reading 'name'未定义错误如何解决
报错原因
你在解析POST请求体的代码中多写了一层value属性的嵌套取值:
Oak框架中await ctx.request.body()返回的是请求体实例对象,该对象的value属性就是你提交的JSON参数对象。你现有代码写法为:
const { value: { name, email, password } } = await ctx.request.body().value;
这段代码相当于:先拿到了参数对象(await ctx.request.body().value的结果就是你的参数{ name: "first", email: "first@one.com", password: "123" }),又尝试从这个参数对象上解构value属性,但你的参数里没有value字段,所以得到的value是undefined,读取undefined的name属性就触发了这个TypeError。
你单独打印await ctx.request.body().value能拿到正确参数,也刚好验证了该逻辑。
解决方法
把register和login方法中解析请求体的代码修正,去掉多余的解构层级即可,推荐写法:
// 修正register方法的请求体解析 const { name, email, password } = await ctx.request.body().value; // 同样修正login方法的请求体解析 const { email, password } = await ctx.request.body().value;
也可以拆分为更清晰的两行写法,避免后续取值出错:
const body = await ctx.request.body(); const { name, email, password } = body.value;
内容的提问来源于stack exchange,提问作者GoodMan
相关产品推荐
相关产品推荐

