Маршрутизация поддоменов Nuxt

Я пытаюсь реализовать маршрутизацию поддоменов в Nuxt. Вот что мне нужно сделать:

/pages/username/index.vue:
username1.mydomain.com (this page should display "hello, i am username1")
username2.mydomain.com (this page should display "hello, i am username2")
username3.mydomain.com (this page should display "hello, i am username3")
username4.mydomain.com (this page should display "hello, i am username4")
and so on

/pages/username/content.vue
username1.mydomain.com/content (this page should display "content by username1")
username2.mydomain.com/content (this page should display "content by username2")
username3.mydomain.com/content (this page should display "content by username3")
username4.mydomain.com/content (this page should display "content by username4")
and so on

Я нашел эту ссылку (еще не заставил ее работать ), но он использует @ Nuxtjs / router для (я думаю) переопределения vue-router - интересно, есть ли лучший способ, мне действительно нравится способность nuxt создавать страницу, и вам не нужно определять подход к маршрутизации. Есть ли способ сделать это в nuxt, в идеале без vue-router, сохраняя поведение страницы / маршрутизации nuxt по умолчанию?


person kp123    schedule 31.07.2020    source источник


Ответы (2)


// router.js

import Router from 'vue-router'

export function createRouter(ssrContext, createDefaultRouter, routerOptions) {
  const options = routerOptions || createDefaultRouter(ssrContext).options

  let routesDirectory = null

  if (process.server && ssrContext && ssrContext.nuxt && ssrContext.req) {
    const req = ssrContext.req

    const domainLevel = (req.headers.host.match(/\./g) || []).length + 1

    // Get routes directory by hostname

    routesDirectory = domainLevel > 2 ? 'sub-domain' : 'root-domain'
    // Save to the object that will be sent to the client as inline-script
    ssrContext.nuxt.routesDirectory = routesDirectory
  }
  if (process.client) {
    // Get what we saved on SSR
    if (window.__NUXT__ && window.__NUXT__.routesDirectory) {
      routesDirectory = window.__NUXT__.routesDirectory
    }
  }

  function isUnderDirectory(route, directory) {
    const path = route.path
    return path === '/' + directory || path.startsWith('/' + directory + '/')
  }

  let newRoutes = options.routes
  if (routesDirectory) {
    newRoutes = options.routes
      .filter((route) => {
        // remove routes from other directories
        const toRemove =
          routesDirectory === 'sub-domain'
            ? 'root-domain'
            : 'sub-domain'
        return !isUnderDirectory(route, toRemove)
      })
      .map((route) => {
        // remove directory from path and name
        if (isUnderDirectory(route, routesDirectory)) {
          return {
            ...route,
            path: route.path.substr(routesDirectory.length + 1) || '/',
            name: route.name.substr(routesDirectory.length + 1) || 'index'
          }
        }
        return route
      })
  }

  return new Router({
    ...options,
    routes: newRoutes
  })
}

https://github.com/nuxt-community/router-module/issues/22#issuecomment-628313757

person ßãlãjî    schedule 23.02.2021

Если у вас есть заранее определенный список имен пользователей, этот модуль k-domains может помочь вам .

Вот пример :

  export default {
    buildModules: [
      [ "k-domains", {
          subDomains: ["username1", "username2", "username3" ], // List of directories to hold te pages for your subdomains
          rootDomain: "main-domain" //  directory to hold the pages for root domain  
      }
      ],
      ["@nuxtjs/router",{
          keepDefaultRouter: true // this line is mandatory...
      }
      ]
    ]
}

с файловым деревом, например:

|   
|─pages
|   ├───username1
|   ├───username2
|   ├───username3
|   └───main-domain

Ответили на: https://stackoverflow.com/a/65813846/3739410

Но если ваши имена пользователей невозможно предсказать, вам следует использовать маршрутизатор для обработки поддомена, как показано здесь: https://levelup.gitconnected.com/managing-wildcard-subdomains-with-vue-router-9fd74518f2f5

person Andre Goulart    schedule 05.04.2021