Next.js调用Strapi API出现ECONNREFUSED连接拒绝错误求助
问题:Next.js向Strapi API发起请求时出现连接拒绝错误
背景
我正在尝试从Next.js应用向Strapi API发起请求,已通过Insomnia和Postman直接请求Strapi成功,但Next.js端请求失败。已验证CMS_STRAPI_TOKEN正确,Next.js应用访问地址为http://localhost:3000/faq。
Strapi服务文件(src/services/common/strapi.service.ts)
import { URLSearchParams } from "url"; const API_URL = "http://localhost:1337/api"; //Generic get method export const strapiGet = async <T>(endpoint: string, params?: URLSearchParams): Promise<T> => { const res = await fetch(`${API_URL}${endpoint}${params ? `?${params}` : ''}`, { headers: { 'Authorization': `Bearer ${process.env.CMS_STRAPI_TOKEN}` } }); if(!res.ok) { throw new Error('Failed to retrieve in strapi: ' + endpoint); } return res.json(); }
faqs.service文件(src/services/faqs/faqs.service.ts)
import { StrapiResultType } from "@/types/strapi.types"; import { FAQPageType } from "@/types/faq.types"; import { strapiGet } from "../common/strapi.service"; class FAQsAPI { getFAQPages = async (): Promise<StrapiResultType<FAQPageType>> => strapiGet(`/faq-pages`); } const faqsApi = new FAQsAPI(); export default faqsApi;
FAQ页面组件(src/app/faq/page.tsx)
import FAQSection from "@/components/faq/FAQSection"; import faqsApi from "@/services/faqs/faqs.service"; export default async function FAQPage() { const faqPages = await faqsApi.getFAQPages(); return ( <main> <FAQSection sections={faqPages.data}/> </main> ); }
错误信息
浏览器网络面板显示请求状态码500,控制台抛出:
⨯ TypeError: fetch failed at async strapiGet (./src/services/common/strapi.service.ts:8:17) at async FAQPage (./src/app/faq/page.tsx:13:22) Cause: Error: connect ECONNREFUSED ::1:1337 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16) at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17) { errno: -4078, code: 'ECONNREFUSED', syscall: 'connect', address: '::1', port: 1337 }
解决方案
- 替换localhost为127.0.0.1:错误显示连接的是IPv6地址
::1,而Strapi可能仅监听了IPv4。将API_URL改为http://127.0.0.1:1337/api,强制使用IPv4连接。 - 检查Strapi监听地址:查看Strapi配置文件(
config/server.js或config/server.ts)中的host字段,确保设置为0.0.0.0或127.0.0.1,避免仅绑定IPv6地址。 - 确认端口占用情况:验证1337端口未被其他服务占用,且Strapi确实在该端口运行。
- 环境适配地址:若在Docker容器或生产环境运行,需将API地址改为Strapi的容器名称或服务域名,而非
localhost。
内容的提问来源于stack exchange,提问作者tukitooo1998
相关产品推荐
相关产品推荐

