如何使用 nestjs 或 express 在自定义数据中获取 res

how to get res in custom data with nestjs or express

中间件回复说验证通过后发送给controller

>> middleware code
async use(req: any, res: any, next: () => void) {
    const validate = await this.validate(req.cookies.token);
    const permission = validate;
    res.permission = permission;
    req.permission = permission;
    next();
}




>> controller code
root(@Res() res: Response, @Req() req: Request) {
    if (res.permission) {
        res.redirect("some where");
    } else {
        return res.render('some views')
    }
    
}

错误信息是 '属性 'permission' 在类型 'Response<any, Record<string,any>>' 上不存在 但是控制器不能用this.How你用吗?

抱歉我英语不好

一个快速解决方法是定义您的自定义类型并扩展 Request.

像这样

type MyResType = {
  permission: boolean;
};

root(@Res() res: Response & MyResType) {
  if (res.permission) {
    return res.redirect("admin");
  }
  
  return res.render('404')
}

它不会抱怨类型但是这不是在 Nestjs 中推荐的做事方式。除非确实有必要,否则不应使用 @Res@Res 装饰器。

我建议使用 guards alongside filters instead and here is the helpful explaination

至少这是正确的做法,测试会更容易。