Nuxt3本地Server/api调用失败问题求助
尝试通过API从Strapi CMS获取数据时遇到500错误。在useGetData.ts组合式函数中调用server/api/get-data接口时,报错信息如下:
[GET] "http://localhost:1337/api/hello-world?locale=es-ES&populate=*": <no response> fetch failed
用Postman调用该API一切正常,API密钥和端点也没问题。但把端点从本地CMS换成线上CMS时,所有功能都能正常运行。想问下Nuxt3的server/api调用本地运行的API是不是有什么问题?
相关代码:
useGetData.ts
const {data, seo} = await $fetch('/api/strapi/retrieve-data', { method: 'POST', body: {locale: iso, collection: collection}, })
server/api/get-data
const data = await $fetch(`${strapiURL}/api/${body.collection}`, { method: "GET", headers: { "Authorization": `Bearer ${strapiToken}` }, query: {locale: body.locale, populate: '*'} });
Nuxt3的server/api本身调用本地API没有问题,大概率是本地环境的网络或配置细节出了问题,以下是几种排查和解决方向:
本地域名解析问题:
当Nuxt服务器端代码调用localhost:1337时,在Docker容器、WSL这类环境里,localhost可能指向的是Nuxt所在的容器/环境,而非宿主机的Strapi服务。可以试试把strapiURL里的localhost换成宿主机真实IP(比如192.168.x.x),WSL环境用172.17.0.1,Docker环境用host.docker.internal来访问宿主机的Strapi。Strapi的CORS配置:
虽然Postman能正常访问,但Nuxt服务器端的请求可能被Strapi的CORS策略拦截。去Strapi后台的Settings > Security > CORS里检查配置,确保允许Nuxt服务的域名(比如本地开发的http://localhost:3000),开发环境可以暂时把CORS放宽到允许所有来源*测试。端口占用或Strapi服务状态:
确认本地Strapi确实在1337端口正常运行,没被其他程序占用。Windows用netstat -ano | findstr :1337,Mac/Linux用lsof -i :1337检查端口,重启Strapi服务后再测试。Nuxt环境变量配置:
检查strapiURL和strapiToken的环境变量是否在Nuxt服务器端正确加载。可以在server/api/get-data里临时打印这两个变量的值,确认和Postman里用的一致,避免环境变量没正确注入导致的错误。请求超时设置:
本地Strapi首次启动或数据量较大时,响应可能偏慢,默认的fetch超时时间可能不够。可以在server/api/get-data的$fetch选项里加timeout: 10000(10秒),延长超时时间试试。
内容的提问来源于stack exchange,提问作者noel293

