我知道,Homebrew 不会通过自动更新(不强制)来升级木桶。因此最终,实际安装并由 Homebrew 跟踪的软件版本会变得不同。例如:
$ brew cask outdated --greedy
firefox (79.0) != 80.0
google-chrome (84.0.4147.105) != 85.0.4183.83
microsoft-edge (84.0.522.48) != 85.0.564.41
Run Code Online (Sandbox Code Playgroud)
Firefox、Chrome 和 Edge 会自动更新,并且实际上拥有最新版本。但 Homebrew 并不知道这一点。
那么,有没有办法告诉 Homebrew,某些 cask 已经是最新版本,而无需使用 brew 重新安装 cask?只需更新 Homebrew 数据库中的记录(或任何 Brew 存储桶的版本)。
在 NestJS 应用程序中是否有一种漂亮的方式来创建重载路由?我有一些想法,但也许我正在发明一个轮子。虽然我找不到任何现成的方法......
我正在谈论的是这样的事情(让我们以https://github.com/nestjs/nest/blob/master/sample/01-cats-app/src/cats/cats.controller.ts作为起点) :
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
@Get()
@Roles('admin')
async findAllAdmin(): Promise<Cat[]> {
return this.catsService.findAllAdmin();
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望有两个具有相同 URL 的路由,但通过其他一些值(例如这里的角色)来区分。
我的想法是创建我自己的装饰器,而不是Get,它将填充一些权重图,分配给每个重载方法的唯一路径。然后,添加中间件,它将从请求中获取参数,将它们与 map 进行比较,并进行内部重定向(使用next('route')或req.app.handle(req, res))到适当的新路径。
但是在这种方法中,我无法从请求中获取用户,如果他们应该在其中一种方法上使用AuthGuard进行身份验证......
我需要编写中间件来处理请求,但应该排除一些路径。我不想手动硬编码所有这些,所以我有一个想法:
创建特殊的装饰器,它将标记要排除的方法,如下所示:
import { ReflectMetadata } from '@nestjs/common';
export const Exclude = () =>
ReflectMetadata('exclude', 'true');
Run Code Online (Sandbox Code Playgroud)
在创建 NestJS 应用程序后,有没有办法以某种方式递归获取所有方法,用这个装饰器注释,自动添加它们的路径以排除在我的中间件中?