如何在NestJS中获取前端请求的源域名?
嘿,我来帮你搞定NestJS里获取请求源域名的问题!你遇到的req.origin为undefined的情况很常见,因为NestJS并没有把这个属性直接挂在Request对象上,但咱们可以通过更标准的请求头方式来获取,具体方法如下:
在NestJS中获取请求的源域名
核心思路:从请求头取Origin字段
浏览器发起请求(尤其是跨域请求)时,会自动携带Origin请求头,这才是获取源域名的标准途径,比直接用req.origin靠谱多了。
第一步:在控制器中注入Request对象
先在你的控制器方法里用@Req()装饰器拿到请求实例,记得要引入Express的Request类型哦:import { Controller, Get, Req } from '@nestjs/common'; import { Request } from 'express'; @Controller('demo') export class DemoController { @Get('get-origin') getRequestOrigin(@Req() req: Request) { // 在这里获取源域名 } }第二步:两种方式获取源域名
拿到Request对象后,有两种简单的方式获取Origin:- 用Express提供的便捷方法
req.get('origin'),它会自动处理请求头的大小写问题:const origin = req.get('origin'); // 示例返回:https://your-frontend-site.com - 直接访问请求头对象
req.headers.origin:const origin = req.headers.origin;
- 用Express提供的便捷方法
几个要注意的点
- 同域请求时,浏览器可能不会发送
Origin头,这时候拿到的会是undefined,你可以根据业务需求设置默认值或者做特殊处理 - 如果你的NestJS配置了CORS中间件,要确保CORS规则允许对应源,否则
Origin头可能会被拦截,导致获取不到
- 同域请求时,浏览器可能不会发送
要是你需要在全局范围内(比如拦截器、守卫里)获取源域名,方法也是一样的,只要能拿到Request对象,就能通过上面的方式获取啦。
内容的提问来源于stack exchange,提问作者Nathalie
相关产品推荐
相关产品推荐

