You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The server log of the GET and subsequent POST request look like this:
Incoming request GET http://localhost:4321/post
15:16:44 [200] (rewrite) /post 2ms
Incoming request POST http://localhost:4321/post
15:16:46 [200] (rewrite) POST /post 2ms
However, when using an Astro action, the rewrite does not work as expected, produces an internal 404 followed by an unwanted redirect and dropping the form data.
The server log of the GET and subsequent POST request look like this:
Incoming request GET http://localhost:4321/action
15:19:09 [200] (rewrite) /action 4ms
Incoming request POST http://localhost:4321/action?_astroAction=sum
15:19:18 [404] POST /action 1ms
Incoming request GET http://localhost:4321/with-action
15:19:18 [200] /with-action 4ms
On the client, the POST request is responded with a 302 pointing to /with-action, which updates the URL in the browser.
The action implementation is as expected:
// actions.tsimport{defineAction}from"astro:actions"import{z}from"astro:schema"constsum=defineAction({accept: "form",input: z.object({a: z.number(),b: z.number(),}),asynchandler({ a, b }){returna+b},})exportconstserver={ sum }
What's the expected result?
I expect both implementations of the form to yield the same results. The action should not be influenced by the rewrite of the URL. A rewrite should not produce a 302 response.
pothos-dev
changed the title
Rewrite leads to 404 when using Server Actions in Forms
Rewrite leads to 404 followed by 302 when using Server Actions in Forms
Oct 7, 2024
I am not really sure what you're trying to do, however this seems to be the expected behaviour.
I need to understand why you have a /404, however the actions use a middleware under the hood, and when you call next('/with-action'), a new Request is created with /with-action as Request.pathname, and the middleware of Astro action uses that pathname when it does a redirect.
The action should not be influenced by the rewrite of the URL
I am unsure we can achieve this, considering we use a middleware here.
The reason that I'm using a rewrite is this: I am trying to have different "apps" within the same Astro project. Each app lives within a separate root folder, like /pages/app1/, /pages/app2/.
The middleware inspects the requests and decides which app this particular user should be using. So a user navigates to /home and gets rewritten to /app1/home, another user would instead be rewritten to /app2/home. I want to hide the fact that there are different root folders, the users should just see the /home part of the URL.
So far, everything worked wonderfully, but after implementing an action, the issue arose.
I think the issue comes down to Astro.url pointing to the internal path of the page (e.g. /app1/home), while the user should only ever see a different url (/home). In my application code, I'm storing the "external" path as Astro.locals.pathname and use that whenever I need to deal with the URL.
Actions seem to do something under the hood that's not easy to understand for me (is there some more indepth documentation about how actions work internally?), and I can't seem to intercept to swap out internal and external paths. If the way actions are currently interacting with rewrites is the expected and correct way, I need to either avoid using actions altogether, or find another way to implement my multiple app folders within the project.
Astro Info
If this issue only occurs in one browser, which browser is a problem?
No response
Describe the Bug
I have a middleware that rewrites the URL (
/post -> /with-post
and/action -> /with-action
).This works for regular GET and POST requests. For example, the
with-post.astro
page correctly handles the incoming form data:The server log of the GET and subsequent POST request look like this:
However, when using an Astro action, the rewrite does not work as expected, produces an internal 404 followed by an unwanted redirect and dropping the form data.
The server log of the GET and subsequent POST request look like this:
On the client, the POST request is responded with a 302 pointing to
/with-action
, which updates the URL in the browser.The action implementation is as expected:
What's the expected result?
I expect both implementations of the form to yield the same results. The action should not be influenced by the rewrite of the URL. A rewrite should not produce a 302 response.
Link to Minimal Reproducible Example
https://github.com/pothos-dev/astro-actions-rewrite
Participation
The text was updated successfully, but these errors were encountered: