NestJS全局前缀和参数



我们为几乎所有的url定义了一个前缀,比如&;companyname &;。为了防止它,我们在main.ts

中使用了全局前缀
app.setGlobalPrefix(':companyName/');

有没有办法抓住它作为一个全局变量?

我们考虑过开发一个中间件,但我们不知道全局变量是否会对所有请求保持相同的值,或者该值会被其他请求改变。

不,将其存储为全局变量将不起作用。全局变量是唯一的,将被所有请求共享,所以正如你所猜测的,其他请求可能会改变它的值。

即使它可以工作,companyName是你的请求的上下文,而不是你的应用程序。全局变量应该是常量值。比如数据库URI或任何在启动后不应该改变的值,但应该在整个应用程序中都可以访问。

执行您想要执行的操作的最简单方法是从控制器中的URI读取值并将该值传递给业务服务。像这样,每个请求都有自己的上下文,独立于其他请求,减少了副作用的风险。

如果您不知道如何检索值,这里有一个小示例:

检索值非常简单。就像处理经典http参数一样。您可以在文档https://docs.nestjs.com/controllers#route-parameters

中找到一些基本示例。只要可以访问URI,就可以检索这个值。

例如,在控制器中,您可以通过@Param注释获得它,如下所示:
@Get('someroute')
yourRoute(
@Param('companyName') companyName: string
): {
*do something*
}

你也可以在任何类型的中间件中通过直接读取请求来访问它。

例如,在一个守卫中,你可以这样做:

async canActivate(context: ExecutionContext): Promise<boolean> {
const request: Request = context.switchToHttp().getRequest();
const companyName = request.params['companyName']
*do something*
}

希望这能回答你的问题。

最新更新