【发布时间】: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