代码流在收到承诺后停止



我有一个简单的函数来验证用户记录上的令牌。

@Get("confirm/:token")
verifyEmail(@Param("token") token: string, @Res() res: Request) {
console.log("confirm called")
console.log(token);
const user = this.userRepository.findOne({where: {token: token}});
console.log("user promise")
return res.res?.redirect("/home/welcome");
}

当我运行代码时,我可以在控制台中看到";用户承诺";但根本没有进展,问题可能出在哪里?

您注入了Response对象,但告诉Typescript您使用了Request对象,因此Typescript不能警告您res.res.redirect实际上不是正确的。您应该使用express中的Response类型,并调用res.redirect而不是res.res?.redirect

您没有得到错误的原因是可选运算符,如果您访问的对象为null或未定义,则它在执行过程中不会继续执行。

或者,正如您所发现的,您可以使用@Redirect()装饰器,只需确保删除@Res()注入,因为这是不必要的

我能够通过使用Redirect((装饰器来解决我的问题,如下所示

@Get("confirm/:token")
@Redirect('http://localhost:3000/home/welcome', 301)
verifyEmail(@Param("token") token: string, @Res() res: Request) {
console.log("confirm called")
console.log(token);
const user = this.userRepository.findOne({where: {token: token}});
console.log("user promise")
user.then((u) => console.log(u));
return res.res?.redirect("/home/welcome");
}

最新更新