fix proxy + file upload
This commit is contained in:
parent
db68058d5b
commit
5453d49c92
4 changed files with 92 additions and 9 deletions
19
adapters/static/vite.config.ts
Normal file
19
adapters/static/vite.config.ts
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
import { staticAdapter } from "@builder.io/qwik-city/adapters/static/vite";
|
||||||
|
import { extendConfig } from "@builder.io/qwik-city/vite";
|
||||||
|
import baseConfig from "../../vite.config";
|
||||||
|
|
||||||
|
export default extendConfig(baseConfig, () => {
|
||||||
|
return {
|
||||||
|
build: {
|
||||||
|
ssr: true,
|
||||||
|
rollupOptions: {
|
||||||
|
input: ["@qwik-city-plan"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
staticAdapter({
|
||||||
|
origin: "https://yoursite.qwik.dev",
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
};
|
||||||
|
});
|
|
@ -11,6 +11,7 @@
|
||||||
"build": "qwik build",
|
"build": "qwik build",
|
||||||
"build.client": "vite build",
|
"build.client": "vite build",
|
||||||
"build.preview": "vite build --ssr src/entry.preview.tsx",
|
"build.preview": "vite build --ssr src/entry.preview.tsx",
|
||||||
|
"build.server": "vite build -c adapters/static/vite.config.ts",
|
||||||
"build.types": "tsc --incremental --noEmit",
|
"build.types": "tsc --incremental --noEmit",
|
||||||
"deploy": "echo 'Run \"npm run qwik add\" to install a server adapter'",
|
"deploy": "echo 'Run \"npm run qwik add\" to install a server adapter'",
|
||||||
"dev": "vite --mode ssr",
|
"dev": "vite --mode ssr",
|
||||||
|
|
|
@ -4,20 +4,24 @@ const proxy = async ({ send, url, pathname, request }: RequestEvent) => {
|
||||||
const targetUrl = new URL(`http://localhost:8081${pathname}`, url);
|
const targetUrl = new URL(`http://localhost:8081${pathname}`, url);
|
||||||
const headers = new Headers(request.headers);
|
const headers = new Headers(request.headers);
|
||||||
|
|
||||||
const backendResponse = await fetch(targetUrl, {
|
const fetchOptions: RequestInit = {
|
||||||
method: request.method,
|
method: request.method,
|
||||||
headers,
|
headers,
|
||||||
body: request.method !== 'GET' && request.method !== 'HEAD' ? request.body : undefined,
|
|
||||||
redirect: 'manual',
|
redirect: 'manual',
|
||||||
});
|
};
|
||||||
|
|
||||||
console.log(`Proxying ${request.method} request to: ${targetUrl.href}`);
|
if (request.method !== 'GET' && request.method !== 'HEAD') {
|
||||||
|
fetchOptions.body = request.body;
|
||||||
|
(fetchOptions as any).duplex = 'half';
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = await fetch(targetUrl, fetchOptions);
|
||||||
|
|
||||||
send(
|
send(
|
||||||
new Response(backendResponse.body, {
|
new Response(res.body, {
|
||||||
status: backendResponse.status,
|
status: res.status,
|
||||||
statusText: backendResponse.statusText,
|
statusText: res.statusText,
|
||||||
headers: backendResponse.headers,
|
headers: res.headers,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { component$, useSignal, useVisibleTask$ } from "@builder.io/qwik";
|
import { $, component$, noSerialize, NoSerialize, useSignal, useTask$, useVisibleTask$ } from "@builder.io/qwik";
|
||||||
import type { DocumentHead } from "@builder.io/qwik-city";
|
import type { DocumentHead } from "@builder.io/qwik-city";
|
||||||
import ky from "ky";
|
import ky from "ky";
|
||||||
import Controlbar from "~/components/Controlbar";
|
import Controlbar from "~/components/Controlbar";
|
||||||
|
@ -11,6 +11,9 @@ import { StereoFile } from "~/lib/types";
|
||||||
export default component$(() => {
|
export default component$(() => {
|
||||||
const files = useSignal<StereoFile[]>([]);
|
const files = useSignal<StereoFile[]>([]);
|
||||||
const loaded = useSignal(false);
|
const loaded = useSignal(false);
|
||||||
|
|
||||||
|
const uploadingFile = useSignal<NoSerialize<File> | undefined>();
|
||||||
|
|
||||||
useVisibleTask$(async () => {
|
useVisibleTask$(async () => {
|
||||||
const res: StereoFile[] | undefined
|
const res: StereoFile[] | undefined
|
||||||
= await ky.get("/api/list", {
|
= await ky.get("/api/list", {
|
||||||
|
@ -23,10 +26,66 @@ export default component$(() => {
|
||||||
loaded.value = true;
|
loaded.value = true;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
useTask$(({ track }) => {
|
||||||
|
track(() => uploadingFile.value);
|
||||||
|
console.log("File input changed:", uploadingFile.value);
|
||||||
|
});
|
||||||
|
|
||||||
|
const uploadFile = $(
|
||||||
|
async () => {
|
||||||
|
if (!uploadingFile.value) {
|
||||||
|
console.error("No file selected for upload.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file", uploadingFile.value as File);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await ky.post("/api/upload", {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${localStorage.getItem("token")}`
|
||||||
|
},
|
||||||
|
body: formData
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`HTTP error! status: ${response.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const res: StereoFile = await response.json();
|
||||||
|
files.value.push(res);
|
||||||
|
|
||||||
|
loaded.value = false;
|
||||||
|
files.value = await ky.get("/api/list", {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${localStorage.getItem("token")}`
|
||||||
|
}
|
||||||
|
}).json();
|
||||||
|
loaded.value = true;
|
||||||
|
|
||||||
|
} catch (e) { console.error(e) }
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Controlbar />
|
<Controlbar />
|
||||||
<a href={OAUTH_LINK}>oauth</a>
|
<a href={OAUTH_LINK}>oauth</a>
|
||||||
|
<input
|
||||||
|
onChange$={(e: Event) => {
|
||||||
|
const target = e.target as HTMLInputElement;
|
||||||
|
console.log("File input changed:", target.files![0]);
|
||||||
|
uploadingFile.value = noSerialize(target.files![0]);
|
||||||
|
}}
|
||||||
|
type="file"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<button
|
||||||
|
onClick$={uploadFile}
|
||||||
|
>
|
||||||
|
upload
|
||||||
|
</button>
|
||||||
|
|
||||||
<div class="grid grid-cols-3 gap-4 p-4">
|
<div class="grid grid-cols-3 gap-4 p-4">
|
||||||
{/* TODO: make ts better :broken_heart: */}
|
{/* TODO: make ts better :broken_heart: */}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue