Skip to content

Commit

Permalink
add-api-proxy: Replace routeRules with server handlers
Browse files Browse the repository at this point in the history
  • Loading branch information
vloss3 committed Dec 6, 2023
1 parent 003b311 commit bee448c
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 12 deletions.
3 changes: 2 additions & 1 deletion playground/nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export default defineNuxtConfig({
DrupalCe
],
drupalCe: {
baseURL: process.env.DRUPAL_BASE_URL || 'https://8080-drunomics-lupusdecouple-fypxwm6rhgb.ws-eu89.gitpod.io/ce-api'
baseURL: process.env.DRUPAL_BASE_URL || 'https://8080-drunomics-lupusdecouple-ih6hr5d3dwc.ws-eu106.gitpod.io/ce-api',
menuBaseUrl: process.env.DRUPAL_BASE_URL || 'https://8080-drunomics-lupusdecouple-ih6hr5d3dwc.ws-eu106.gitpod.io/ce-api',
}
})
20 changes: 9 additions & 11 deletions src/module.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { fileURLToPath } from 'url'
import { defineNuxtModule, addPlugin, createResolver, addImportsDir } from '@nuxt/kit'
import { defineNuxtModule, addPlugin, createResolver, addImportsDir, addServerHandler } from '@nuxt/kit'
import type { UseFetchOptions } from 'nuxt/dist/app/composables'
import { defu } from 'defu'

Expand Down Expand Up @@ -72,16 +72,14 @@ export default defineNuxtModule<ModuleOptions>({
nuxt.options.runtimeConfig.public.drupalCe = defu(nuxt.options.runtimeConfig.public.drupalCe ?? {}, options)

if (options.exposeAPIRouteRules === true) {
const defaultRouteRules: Record<string, { proxy: string, swr?: number }> = {
'/api/drupal-ce/**': { proxy: options.baseURL + '/**' },
'/api/menu/**': { proxy: options.baseURL + '/**', swr: nuxt.options.dev ? 0 : 300 }
}

if (nuxt.options.nitro?.routeRules) {
nuxt.options.nitro.routeRules = defu(nuxt.options.nitro.routeRules, defaultRouteRules) as { [path: string]: { proxy: string, swr?: number } }
} else {
nuxt.options.nitro = { routeRules: defaultRouteRules }
}
addServerHandler({
route: '/api/drupal-ce/**',
handler: resolve(resolve(runtimeDir, 'server/api/drupalCe.ts')),
})
addServerHandler({
route: '/api/menu/**',
handler: resolve(resolve(runtimeDir, 'server/api/menu.ts'))
})
}
}
})
Expand Down
5 changes: 5 additions & 0 deletions src/runtime/composables/useDrupalCe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ export const useDrupalCe = () => {
useFetchOptions.query._format = 'custom_elements'
}

if (config.exposeAPIRouteRules && path === '/') {
// The root path needs to be rewritten to /api/drupal-ce.
path = '/api/drupal-ce'
}
const { data: page, error } = await useFetch(path, useFetchOptions)

if (page?.value?.redirect) {
Expand Down Expand Up @@ -109,6 +113,7 @@ export const useDrupalCe = () => {

if (config.exposeAPIRouteRules) {
useFetchOptions.baseURL = useRequestURL().origin + '/api/menu'
menuPath.value = name
}

const { data: menu, error } = await useFetch(menuPath, useFetchOptions)
Expand Down
6 changes: 6 additions & 0 deletions src/runtime/server/api/drupalCe.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default defineEventHandler(async (event) => {
console.log(event.context)
const path = `/${event.context.params._.replace('api/drupal-ce', '')}`
const drupalBaseUrl = useRuntimeConfig().public.drupalCe.baseURL
return await proxyRequest(event, drupalBaseUrl + path)
});
11 changes: 11 additions & 0 deletions src/runtime/server/api/menu.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export default defineEventHandler(async (event) => {
const menuBaseUrl = useRuntimeConfig().public.drupalCe.menuBaseUrl
let menuEndpoint = useRuntimeConfig().public.drupalCe.menuEndpoint
const menuName = event.context.params._
menuEndpoint = menuEndpoint.replace('$$$NAME$$$', menuName)
return await proxyRequest(event, `${menuBaseUrl}/${menuEndpoint}`, {
headers: {
'Cache-Control': 'max-age=300',
}
})
});

0 comments on commit bee448c

Please sign in to comment.