api route build error  ECONNREFUSED
๐Ÿ“œ

api route build error ECONNREFUSED

์ž‘์„ฑ์ผ
2024๋…„ 05์›” 21์ผ
ํƒœ๊ทธ
์นดํ…Œ๊ณ ๋ฆฌ
nextjs
Last edited time
Last updated October 23, 2024
๋‚ ์งœ
ย 
ย 
api router๋Š” ๋‹น์—ฐํžˆ build์‹œ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ
๋‚˜๋Š” useEffect๋‚ด์—์„œ ํ˜ธ์ถœํ•˜๋Š”๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ.
ย 
(ํด๋ผ์ด์–ธํŠธ๋กœ์ง์ž„) ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋‚˜ getServerSideProps์—์„œ ๋กœ์ปฌ API๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋นŒ๋“œ ํƒ€์ž„์— ์„œ๋ฒ„๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
ย 

1. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋กœ์ง์„ ์ง์ ‘ ํ˜ธ์ถœ

๋ฌธ์ œ ์ฝ”๋“œ (์ž˜๋ชป๋œ ์ ‘๊ทผ ๋ฐฉ์‹)

export default async function Page() { const res = await fetch("http://localhost:3000/api/user?uid=123456"); const user = await res.json(); return <div>{user?.name}</div>; }

ํ•ด๊ฒฐ ์ฝ”๋“œ (์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹)

์—ฌ๊ธฐ์„œ๋Š” fetch๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
import { prisma } from '~/lib/prisma'; export default async function Page() { const user = await prisma.user.findUnique({ where: { id: 123456 } }); return <div>{user?.name}</div>; }

2. getServerSideProps์—์„œ ์ง์ ‘ ํ˜ธ์ถœ

๋ฌธ์ œ ์ฝ”๋“œ (์ž˜๋ชป๋œ ์ ‘๊ทผ ๋ฐฉ์‹)

export async function getServerSideProps() { const res = await fetch("http://localhost:3000/api/user?uid=123456"); const user = await res.json(); return { props: { user }, }; }

ํ•ด๊ฒฐ ์ฝ”๋“œ (์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹)

์—ฌ๊ธฐ์„œ๋„ fetch๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
import { prisma } from '~/lib/prisma'; export async function getServerSideProps() { const user = await prisma.user.findUnique({ where: { id: 123456 } }); return { props: { user }, }; }

3. ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ API ํ˜ธ์ถœ

ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” fetch๋‚˜ axios๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, useEffect๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
import { useEffect, useState } from 'react'; const ProductList = () => { const [products, setProducts] = useState([]); useEffect(() => { const fetchData = async () => { const res = await fetch('/api/product_list'); const data = await res.json(); setProducts(data); }; fetchData(); }, []); return ( <div> {products.map((product) => ( <div key={product.id}>{product.name}</div> ))} </div> ); }; export default ProductList;

์š”์•ฝ

  • ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ํ•จ์ˆ˜: ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ: fetch๋‚˜ axios๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ๊ฒฝ๋กœ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • API ๊ฒฝ๋กœ: ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
ย