Files
pc-10588/server/api/cms-navigation.get.ts

43 lines
1.3 KiB
TypeScript

import { $fetch } from 'ofetch'
import { createError, defineEventHandler, getHeader, getQuery } from 'h3'
import { useRuntimeConfig } from '#imports'
// Frontend-friendly endpoint:
// GET /api/cms-navigation?parentId=xxxx
// Proxies to CMS modules API. Some deployments expose "/cms-navigation", others "/cms/cms-navigation".
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const query = getQuery(event)
const modulesApiBase =
config.public.modulesApiBase || config.public.ApiBase || 'https://cms-api.websoft.top/api'
const tenantId =
getHeader(event, 'tenantid') ||
config.public.tenantId ||
config.public.TenantId ||
'10588'
const authorization = getHeader(event, 'authorization')
const headers = {
TenantId: String(tenantId),
...(authorization ? { Authorization: String(authorization) } : {})
}
const upstreamCandidates = ['/cms-navigation', '/cms/cms-navigation']
let lastError: any
for (const path of upstreamCandidates) {
try {
return await $fetch(path, { baseURL: modulesApiBase, headers, query })
} catch (error: any) {
lastError = error
}
}
throw createError({
statusCode: lastError?.statusCode || lastError?.response?.status || 502,
statusMessage: lastError?.statusMessage || 'Failed to fetch cms navigation'
})
})