Nuxt 3.0.0-rc.11 with Nitro 0.5.12> /Server/api functions fail on POST requests, GET methods are OK when publishing to Cloudflare pages functions)
See original GitHub issueEnvironment
Nuxt 3.0.0-rc.10-27718444.40d0907 with Nitro 0.5.2-27718085.c24dbcf
Cloudflare pages with functions
Reproduction
https://stackblitz.com/edit/github-dxg5qg?file=server/api/customer.get.js
Describe the bug
Deployment of my Nuxt 3 app that contains following folder server folder structure
/server/api/customer.post.js <- POST fail with 405 method not allowed on cloudflare pages /server/api/customer.get.js <-- GET works. /server/api/test.js <-- should response to all routes
Nitro preset : nitro: { preset: ‘cloudflare_pages’, },
Upon pushing to github, cloudflare initiates a page build with the following successful log entries on cf pages:
Nuxt 3.0.0-rc.11-27719556.94377b1 with Nitro 0.5.3-27719444.ff99330
--
18:54:51.303 | ℹ Client built in 2421ms
18:54:51.304 | ℹ Building server...
18:54:52.513 | ✔ Server built in 1209ms
18:54:52.572 | ✔ Generated public .output/public
18:54:52.588 | ℹ Building Nitro Server (preset: cloudflare_pages)
18:54:59.396 | ✔ Nitro server built
18:54:59.419 | └─ functions/path.js (414 kB) (132 kB gzip)
...
18:55:16.586 | Success: Assets published!
18:55:18.083 | Success: Your site was deployed!
When visiting the domain all looks good and page is published! Now time to test the /functions folder
GET https://www.domain.com/api/customer HTTP/1.1
RESULT : 200 OK
POST https://www.domain.com/api/customer HTTP/1.1
RESULT : 405 NOT ALLOWED
POST https://www.domain/api/incorrectpath HTTP/1.1
RESULT : 405 NOT ALLOWED (should return 404 NOT FOUND)
Talking to Cloudflare discord support they say <quote>
Let them know that if they want to discuss it then feel free to pop on here. Cloudflare Pages never returns 405s, so this is Nitro
- No POST handlers work, either in the .post.js file or the .js file
- It works in dev (so in Vite), not prod
- The command (make sure they know the command is build not generate)
Strangely when I POST to a route that does not exist like POST https://www.domain.com/api/blah, the result is also 405 NOT ALLOWED, hence it seems all POST requests are being block before the function is actually triggered, but for some reason all GET routes are OK.
to recreate the issue
- use the stackblitz template above : https://stackblitz.com/edit/github-dxg5qg?file=server/api/customer.get.js
- run
npm run build
, not generate, as generate will not create /functions folders npx wrangler pages dev .output/public
ORnpx wrangler pages publish .output/public
- visit xxx.com/api/customer – this will be a GET and it will work
- make a postman POST request to xx.com/api/customer - it will fail with 405 (if not pls let me know)
According to the nitro docs : it should just work.
Additional context
Cf discord channel has been informed of this issue and says they would be happy to connect with nuxt core team, please contact the discord community member @isaac-mcfadyen#4321 on cloudflare-pages discord channel.
Issue Analytics
- State:
- Created a year ago
- Reactions:6
- Comments:6
Top GitHub Comments
sorry hoping to get some eyes on this issue
I did a bit of digging on this, the error might be somewhere here
The GET method will return
404
every other method will return405
Ultimately the execution will end up inwrangler > miniflare-dist > index.mjs > generateHandler > generateResponse
and it calls this code:That is the cause of this behavior.
Not sure what the recommended fix would be… @DaniFoldi ?