index.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import Vue from 'vue'
  2. import Router from 'vue-router'
  3. Vue.use(Router)
  4. const KAIFAIN = 'kaifain'
  5. const JISHUIN = 'jishuin'
  6. const RE_IPV4 = /^(\d+.)+\d+$/
  7. const getServerHostname = ({ req }) => {
  8. console.log('@ctx.req', req.url)
  9. console.log('@ctx.req.headers', req.headers)
  10. const { host, referer } = req.headers
  11. let hostname = host.split(':')[0]
  12. if (RE_IPV4.test(hostname)) {
  13. hostname = referer && new URL(referer).hostname
  14. }
  15. return hostname
  16. }
  17. const filterAndRemapRoutesByScope = (routes, scope) => {
  18. return [
  19. ...routes
  20. .filter(r => r.path.startsWith('/' + scope))
  21. .map(r => {
  22. const clone = { ...r }
  23. clone.path = r.path.replace('/' + scope, '') || '/'
  24. clone.name = r.name + '_$'
  25. return clone
  26. }),
  27. ...routes
  28. ]
  29. }
  30. export function createRouter(ssrContext, createDefaultRouter, routerOptions) {
  31. const options = routerOptions || createDefaultRouter(ssrContext).options
  32. const hostname = ssrContext ? getServerHostname(ssrContext) : location.host
  33. return new Router({
  34. ...options,
  35. routes: fixRoutes(options.routes, hostname),
  36. })
  37. }
  38. function fixRoutes(defaultRoutes, hostname) {
  39. if (hostname && hostname.includes(KAIFAIN)) return kaifainRoutes(defaultRoutes)
  40. if (hostname && hostname.includes(JISHUIN)) return jishuinRoutes(defaultRoutes)
  41. return defaultRoutes
  42. }
  43. function kaifainRoutes(defaultRoutes) {
  44. return filterAndRemapRoutesByScope(defaultRoutes, KAIFAIN)
  45. }
  46. function jishuinRoutes(defaultRoutes) {
  47. return filterAndRemapRoutesByScope(defaultRoutes, JISHUIN)
  48. }