大家好。我建立了一个简单的next.js页面,通过API从Strapi获取数据。它在本地运行得很好。但是当我在Docker中运行它们时,我得到了一个ECONNREFUSED错误。
下面是错误:
error - TypeError: fetch failed
frontend | at Object.fetch (node:internal/deps/undici/undici:11118:11)
frontend | at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
frontend | at async getStaticProps (webpack-internal:///./pages/index.tsx:38:17)
frontend | at async Object.renderToHTML (/usr/local/frontend/node_modules/next/dist/server/render.js:384:20)
frontend | at async doRender (/usr/local/frontend/node_modules/next/dist/server/base-server.js:708:34)
frontend | at async cacheEntry.responseCache.get.isManualRevalidate.isManualRevalidate (/usr/local/frontend/node_modules/next/dist/server/base-server.js:813:28)
frontend | at async /usr/local/frontend/node_modules/next/dist/server/response-cache/index.js:80:36 {
frontend | cause: Error: connect ECONNREFUSED 127.0.0.1:1337
frontend | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1300:16) {
frontend | errno: -111,
frontend | code: 'ECONNREFUSED',
frontend | syscall: 'connect',
frontend | address: '127.0.0.1',
frontend | port: 1337
frontend | },
frontend | page: '/'
frontend | }
下面是Next. js中的代码:
export async function getStaticProps() {
const res = await fetch('http://localhost:1337/api/posts')
const data = await res.json()
return {
props: { data },
}
}
我的博客. yml:
version: '3.8'
services:
backend:
container_name: backend
build:
context: backend
dockerfile: .docker/dev.dockerfile
image: backend:latest
# restart: unless-stopped
env_file: ./backend/.env
volumes:
- strapi_data:/usr/local/backend/strapi/.tmp
- strapi_upload:/usr/local/backend/strapi/public/uploads
ports:
- '1337:1337'
frontend:
container_name: frontend
build:
context: frontend
dockerfile: .docker/dev.dockerfile
image: frontend:latest
# restart: unless-stopped
env_file: ./frontend/.env
volumes:
- node_modules_next:/usr/local/frontend/node_modules
- next_folder:/usr/local/frontend
ports:
- '3000:3000'
depends_on:
- 'backend'
volumes:
node_modules_next:
next_folder:
strapi_data:
strapi_upload:
我按照以下指南在Strapi中设置中间件:
export default [
"strapi::errors",
"strapi::security",
// 'strapi::cors',
{
name: "strapi::cors",
config: {
origin: "*",
methods: ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"],
headers: ["Content-Type", "Authorization", "Origin", "Accept"],
keepHeaderOnError: true,
},
},
"strapi::poweredBy",
"strapi::logger",
"strapi::query",
"strapi::body",
"strapi::session",
"strapi::favicon",
"strapi::public",
];
但它不起作用。
我还尝试将getStaticProps更改为getServerSideProps,但没有成功。
1条答案
按热度按时间rm5edbpk1#
我自己也想到了,在服务器上运行docker-compose后,我将获取链接从http://localhost:1337/api/posts更改为http://{ip}:1337/api/posts
而且很管用。