diff --git a/packages/devtools/client/components/ServerRouteDetails.vue b/packages/devtools/client/components/ServerRouteDetails.vue index 774e02982..fba515f7b 100644 --- a/packages/devtools/client/components/ServerRouteDetails.vue +++ b/packages/devtools/client/components/ServerRouteDetails.vue @@ -17,6 +17,7 @@ const config = useServerConfig() const response = reactive({ contentType: 'text/plain', data: '' as any, + statusCode: 200, error: undefined as Error | undefined, }) @@ -47,7 +48,7 @@ const started = ref(false) const parsedRoute = computed(() => props.route.route?.split(/((?:\*\*)?:[\w_]+)/g)) const paramNames = computed(() => parsedRoute.value?.filter(i => i.startsWith(':') || i.startsWith('**:')) || []) -const method = computed(() => (props.route.method || 'GET').toUpperCase()) +const routeMethod = ref(props.route.method || 'GET') const routeParams = ref({}) const routeBodies = ref([{ key: '', value: '' }]) const routeQueries = ref([{ key: '', value: '' }]) @@ -78,7 +79,7 @@ const finalURL = computed(() => { if (query) query = `?${query}` - return domain.value + (parsedRoute.value?.map((i) => { + return (parsedRoute.value?.map((i) => { if (i.startsWith(':') || i.startsWith('**:')) return routeParams.value[i] || i return i @@ -98,18 +99,18 @@ async function fetchData() { const start = Date.now() try { - response.data = await $fetch(finalURL.value, { - method: method.value.toUpperCase() as any, + response.data = await $fetch(domain.value + finalURL.value, { + method: routeMethod.value.toUpperCase() as any, headers: Object.fromEntries(routeHeaders.value.filter(({ key, value }) => key && value).map(({ key, value }) => [key, value])), query: Object.fromEntries(routeQueries.value.filter(({ key, value }) => key && value).map(({ key, value }) => [key, value])), body: formattedBody.value, onResponse({ response: res }) { response.contentType = (res.headers.get('content-type') || '').toString().toLowerCase().trim() + response.statusCode = res.status }, - onResponseError({ error }) { - console.error(error) - response.error = error - response.data = error?.message || error?.toString?.() || 'Unknown error' + onResponseError(res) { + response.error = res.response._data + response.data = res.response._data }, }) } @@ -125,15 +126,15 @@ const rawFetchRequestCode = computed(() => { const items: string[] = [] - if (method.value.toUpperCase() !== 'GET') - items.push(`method: '${method.value.toUpperCase()}'`) + if (routeMethod.value.toUpperCase() !== 'GET') + items.push(`method: '${routeMethod.value.toUpperCase()}'`) if (headers) items.push(`headers: {\n${headers}\n}`) if (formattedBody.value) items.push(`body: ${JSON.stringify(formattedBody.value, null, 2)}`) - return `await fetch('${finalURL.value}', { + return `await $fetch('${finalURL.value}', { ${items.join(',\n').split('\n').map(line => ` ${line}`).join('\n')} })` }) @@ -148,16 +149,23 @@ const currentParams = computed(() => { if (activeTab.value === 'headers') return routeHeaders.value }) + +const copy = useCopy() +const methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD'] - + +
@@ -267,6 +280,14 @@ const currentParams = computed(() => { > Error + + {{ response.statusCode }} + {{ response.contentType }}