diff options
author | 2024-10-30 12:55:39 +0100 | |
---|---|---|
committer | 2024-10-30 11:55:39 +0000 | |
commit | ea855464870f70af01eba195d8593b39a581d942 (patch) | |
tree | d1c1bf5dd1e0635c30f6f906ad8301d019f1bea7 | |
parent | 413503e52c5bf3e31b111e37ee42876c324b1625 (diff) | |
download | astro-ea855464870f70af01eba195d8593b39a581d942.tar.gz astro-ea855464870f70af01eba195d8593b39a581d942.tar.zst astro-ea855464870f70af01eba195d8593b39a581d942.zip |
Fix base not working with server actions (#12280)
Co-authored-by: Fredrik Löwenhamn <fredrik.lowenhamn@gmail.com>
-rw-r--r-- | packages/astro/src/actions/runtime/virtual/get-action.ts | 2 | ||||
-rw-r--r-- | packages/astro/templates/actions.mjs | 2 | ||||
-rw-r--r-- | packages/astro/test/actions.test.js | 24 |
3 files changed, 26 insertions, 2 deletions
diff --git a/packages/astro/src/actions/runtime/virtual/get-action.ts b/packages/astro/src/actions/runtime/virtual/get-action.ts index 59db34cbc..7cd260f86 100644 --- a/packages/astro/src/actions/runtime/virtual/get-action.ts +++ b/packages/astro/src/actions/runtime/virtual/get-action.ts @@ -12,7 +12,7 @@ export async function getAction( path: string, ): Promise<ActionClient<unknown, ActionAccept, ZodType>> { const pathKeys = path - .replace('/_actions/', '') + .replace(/^.*\/_actions\//, '') .split('.') .map((key) => decodeURIComponent(key)); // @ts-expect-error virtual module diff --git a/packages/astro/templates/actions.mjs b/packages/astro/templates/actions.mjs index 349693eba..d030c3637 100644 --- a/packages/astro/templates/actions.mjs +++ b/packages/astro/templates/actions.mjs @@ -92,7 +92,7 @@ async function handleAction(param, path, context) { headers.set('Content-Length', '0'); } } - const rawResult = await fetch(`/_actions/${path}`, { + const rawResult = await fetch(`${import.meta.env.BASE_URL.replace(/\/$/, "")}/_actions/${path}`, { method: 'POST', body, headers, diff --git a/packages/astro/test/actions.test.js b/packages/astro/test/actions.test.js index 793e6ebe7..2c2d3a2c3 100644 --- a/packages/astro/test/actions.test.js +++ b/packages/astro/test/actions.test.js @@ -466,6 +466,30 @@ describe('Astro Actions', () => { }); }); +it('Base path should be used', async () => { + const fixture = await loadFixture({ + root: './fixtures/actions/', + adapter: testAdapter(), + base: "/base" + }); + const devServer = await fixture.startDevServer(); + const formData = new FormData(); + formData.append('channel', 'bholmesdev'); + formData.append('comment', 'Hello, World!'); + const res = await fixture.fetch('/base/_actions/comment', { + method: 'POST', + body: formData, + }); + + assert.equal(res.ok, true); + assert.equal(res.headers.get('Content-Type'), 'application/json+devalue'); + + const data = devalue.parse(await res.text()); + assert.equal(data.channel, 'bholmesdev'); + assert.equal(data.comment, 'Hello, World!'); + await devServer.stop() +}); + /** * Follow an expected redirect response. * |