Nuxt3开启SSR模式调用Netlify函数出现404错误,求排查方案
问题
我使用Nuxt3开发了一款应用并部署在Netlify平台,同时集成了Netlify Functions。当设置ssr: false时,所有功能运行正常;但启用默认的ssr: true选项后,通过$fetch调用Netlify函数时出现如下404错误:
[nitro] [unhandledRejection] FetchError: [GET] "/.netlify/functions/customFunction1": 404 Page not found: /.netlify/functions/customFunction1
当前的nuxt.config.js配置如下:
nuxt.config.js
export default defineNuxtConfig({ devtools: { enabled: true }, runtimeConfig: { public: { gtagId: 'XXXXXX', }, app: { "baseURL": "/", } }, modules: ["@nuxtjs/i18n", "@pinia/nuxt"], i18n: { vueI18n: "./i18n.config.js", }, css: [ "vuetify/lib/styles/main.sass", "@mdi/font/css/materialdesignicons.min.css", "@/assets/style/main.scss", ], build: { transpile: ["vuetify"], }, alias: { pinia: "/node_modules/@pinia/nuxt/node_modules/pinia/dist/pinia.mjs" } });
可能的问题根源及缺失配置
- Nitro路由未代理Netlify Functions路径
SSR模式下,Nuxt3的Nitro服务器会接管所有请求,默认不会将/.netlify/functions/路径转发到Netlify的函数服务。需要在nuxt.config.js中添加Nitro路由规则,手动代理该路径:
export default defineNuxtConfig({ // 保留原有配置... nitro: { routeRules: { '/.netlify/functions/**': { proxy: 'https://<你的Netlify站点域名>/.netlify/functions/**' } } } })
本地开发时,建议配合Netlify CLI启动项目,确保路径自动映射正确。
- 服务端请求未使用完整函数端点
SSR时,服务端发起的$fetch请求是指向Nitro服务器本身,而非Netlify函数服务。需要在runtimeConfig中配置函数的完整基础URL,避免使用相对路径:
export default defineNuxtConfig({ runtimeConfig: { netlifyFunctionsBaseUrl: process.env.NETLIFY_FUNCTIONS_BASE_URL || 'https://<你的Netlify站点域名>/.netlify/functions', public: { gtagId: 'XXXXXX', }, app: { "baseURL": "/", } }, // 其他原有配置... })
调用函数时改用完整URL:
const { netlifyFunctionsBaseUrl } = useRuntimeConfig() const response = await $fetch(`${netlifyFunctionsBaseUrl}/customFunction1`)
- Netlify部署配置缺失SSR适配
Netlify部署Nuxt3 SSR应用需要正确的netlify.toml配置,确保构建和路由规则正确。检查项目根目录是否有该文件,内容需包含:
[build] command = "npm run build" publish = ".output/public" functions = ".output/server/functions" [[redirects]] from = "/*" to = "/.netlify/functions/server" status = 200
缺少该配置会导致Netlify无法正确处理SSR请求,函数路径被Nitro拦截返回404。
- 函数文件位置不符合Netlify要求
Netlify Functions默认读取netlify/functions目录下的函数,或通过netlify.toml的functions字段指定路径。如果你的函数放在其他位置,需确保配置中正确指定路径,否则Netlify不会部署这些函数,自然返回404。
内容的提问来源于stack exchange,提问作者Cesar Bhering
相关产品推荐
相关产品推荐

