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

如何在NuxtJS模块中获取request.header.host以获取完整域名?

嘿,我之前也碰到过类似的问题!在Nuxt模块里获取请求的Host域名,关键得找对服务器端的上下文时机,下面分Nuxt版本给你说清楚可行的方案:

在Nuxt模块中获取请求Host并修改路由

针对Nuxt 3(当前主流版本)

Nuxt 3基于Nitro引擎,模块可以通过Nitro的服务器钩子或自定义中间件来直接访问请求对象:

1. 使用Nitro的nitro:request钩子

这个钩子会在每个服务器请求进来时触发,能直接拿到完整的请求上下文,是最直接的方式:

export default defineNuxtModule({
  setup(options, nuxt) {
    // 注册Nitro请求钩子
    nuxt.hooks.hook('nitro:request', async (event) => {
      // 从请求头中获取完整Host
      const host = event.req.headers.host;
      console.log('当前请求域名:', host);

      // 这里可以根据Host做路由修改,比如重定向或改写请求路径
      // 示例:针对子域名跳转到对应路由
      // if (host === 'blog.example.com') {
      //   event.res.writeHead(302, { Location: '/blog' + event.req.url });
      //   event.res.end();
      // }
    });
  }
});

2. 注册自定义Server Middleware

如果需要更灵活的路由处理逻辑,可以在模块中注册全局服务器中间件:

export default defineNuxtModule({
  setup(options, nuxt) {
    // 添加全局服务器中间件,匹配所有请求
    nuxt.options.serverMiddleware.push({
      path: '/',
      handler: async (req, res, next) => {
        const host = req.headers.host;
        console.log('当前请求Host:', host);
        
        // 示例:根据Host改写请求路径
        // if (host.includes('admin')) {
        //   req.url = '/admin' + req.url;
        // }
        
        next(); // 放行到后续中间件或路由
      }
    });
  }
});

针对Nuxt 2

如果还在维护Nuxt 2项目,模块可以通过addServerMiddleware方法注册服务器中间件来获取请求对象:

module.exports = function NuxtCustomModule(moduleOptions) {
  // 注册全局服务器中间件
  this.addServerMiddleware({
    path: '/',
    handler: (req, res, next) => {
      const host = req.headers.host;
      console.log('当前请求域名:', host);
      
      // 路由修改示例:针对移动端域名跳转
      // if (host === 'm.example.com') {
      //   req.url = '/mobile' + req.url;
      // }
      
      next();
    }
  });
};

关键提醒

  • 这些逻辑只会在服务器端执行,不用担心客户端没有请求对象的问题,因为钩子和中间件本身就是运行在服务器环境的代码。
  • 绝对不要在客户端生命周期钩子(比如vue:setup、mounted)里尝试获取请求对象,这些环境下根本不存在服务器请求上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:42:39