【问题标题】:Property '' does not exist on type 'Promise<Uint8Array> | Promise<any>| Promise<URLSearchParams> | FormDataReader | Promise<string>|undefined'.deno-ts类型 'Promise<Uint8Array> 上不存在属性 '' |承诺<任何>|承诺<URLSearchParams> |表单数据阅读器 | Promise<string>|undefined'.deno-ts
【发布时间】:2021-11-26 02:13:02
【问题描述】:

我是观看教程视频的新 Deno 学习者。以下代码是教程的身份验证文件代码的一部分。因为它是由以前版本的 Deno 编写的,所以我可以解决大部分错误,除了以下错误:

import {
  create, verify, decode, getNumericDate, 
} from "../deps.ts";
import {RouterContext} from "https://deno.land/x/oak@v9.0.1/mod.ts";
import { userCollection } from "../mongo.ts";
import { hashSync, compareSync } from "../deps.ts";
import User from "../models/User.ts";

export class AuthController {
  async register(ctx: RouterContext) {
    const { value: { name, email, password } } = await ctx.request.body();

    let user = await User.findOne({ email });
    if (user) {
      ctx.response.status = 422;
      ctx.response.body = { message: "Email is already used" };
      return;
    }
    const hashedPassword = hashSync(password);
//////////////// FIRST ERROR HAPPENS HERE///////////////////
    user = new User({ name, email, password: hashedPassword }); 

    await user.save();
    ctx.response.status = 201;
    ctx.response.body = {
      id: user.id,
      name: user.name,
      email: user.email
    };
  }
  async login(ctx: RouterContext) {
/////////////////SECOND ERROR HAPPENS HERE /////////////////////
    const { value: { email, password } } = await ctx.request.body(); 
    if (!email || !password) {
      ctx.response.status = 422;
      ctx.response.body = { message: "Please provide email and password" };
      return;
    }
    let user = await User.findOne({ email });
    if (!user) {
      ctx.response.status = 422;
      ctx.response.body = { message: "Incorrect email" };
      return;
    }
    if (!compareSync(password, user.password)) {
      ctx.response.status = 422;
      ctx.response.body = { message: "Incorrect password" };
      return;
    }

    const key = await crypto.subtle.generateKey(
      { name: "HMAC", hash: "SHA-512" },
      true,
      ["sign", "verify"],
    );

    const jwt = create( { 
      alg: "HS256",
      typ: "JWT",
    }, {
      iss: user.email,
      exp: getNumericDate(
        Date.now() + parseInt(Deno.env.get("JWT_EXP_DURATION") || "0"))
    },
    key
    );

    ctx.response.body = {
      id: user.id,
      name: user.name,
      email: user.email,
      jwt,
    };
  }
}

export default new AuthController();

第一个错误:

Property 'name' does not exist on type 'Promise<Uint8Array> | Promise<any> | Promise<URLSearchParams> | FormDataReader | Promise<string> | undefined'.deno-ts(2339) 

Property 'email' does not exist on type 'Promise<Uint8Array> | Promise<any> | Promise<URLSearchParams> | FormDataReader | Promise<string> | undefined'.deno-ts(2339) 

Property 'password' does not exist on type 'Promise<Uint8Array> | Promise<any> | Promise<URLSearchParams> | FormDataReader | Promise<string> | undefined'.deno-ts(2339)

第二个错误:

Property 'email' does not exist on type 'Promise<Uint8Array> | Promise<any> | Promise<URLSearchParams> | FormDataReader | Promise<string> | undefined'.deno-ts(2339) 

Property 'password' does not exist on type 'Promise<Uint8Array> | Promise<any> | Promise<URLSearchParams> | FormDataReader | Promise<string> | undefined'.deno-ts(2339)

我不明白这是什么意思,我该如何解决?

PS:整个项目代码可以在这里找到:https://github.com/thecodeholic/deno-survey

【问题讨论】:

    标签: promise properties jwt deno oak


    【解决方案1】:

    我只是在导致错误的行之后添加了.value,似乎问题已解决:

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

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 1970-01-01
      • 2020-07-13
      • 2017-07-18
      • 2016-06-27
      • 1970-01-01
      • 2020-08-23
      • 2021-11-04
      相关资源
      最近更新 更多