You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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:

    1. 用Express提供的便捷方法req.get('origin'),它会自动处理请求头的大小写问题:
      const origin = req.get('origin');
      // 示例返回:https://your-frontend-site.com
      
    2. 直接访问请求头对象req.headers.origin:
      const origin = req.headers.origin;
      
  • 几个要注意的点

    • 同域请求时,浏览器可能不会发送Origin头,这时候拿到的会是undefined,你可以根据业务需求设置默认值或者做特殊处理
    • 如果你的NestJS配置了CORS中间件,要确保CORS规则允许对应源,否则Origin头可能会被拦截,导致获取不到

要是你需要在全局范围内(比如拦截器、守卫里)获取源域名,方法也是一样的,只要能拿到Request对象,就能通过上面的方式获取啦。

内容的提问来源于stack exchange,提问作者Nathalie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 07:37:45