지금 하는 플젝이 약간 구조가 복잡해서 백을 nodejs, spring boot 둘 다 사용해야한다
그리고 nodejs 쪽 개발을 내가 맡게 되었. 풀스택 개발자 오히려 조하
Routing: API Routes | Next.js
Using Pages Router Features available in /pages
nextjs.org
next.js의 API Routes를 이용해 프론트코드에서 백엔드까지 작성이 가능하다
src/pages/api 아래에 node 코드를 작성하면 작동한다
프론트에서 호출할 때는
await fetch('/api/audits/info').then(~~).catch(~~).finally(~~)
간단한 테스트 페이지를 만들어봤다
api test 1은 {error : 'error'}를 콘솔에 출력하고
api test 2는 {id:2, msg:'test 2'}를 콘솔에 출력함
React 코드 (프론트 코드)
import Button from "@/components/ui/button/Button";
const Main = () => {
const test1 = async () => {
await fetch(`api/audits`)
.then((response) => {
if (response.status === 200 || response.status === 500)
return response.json();
throw new Error(response.statusText);
})
.then((data) => {
console.log(data);
})
.catch((error) => {
console.log("error", error);
});
};
const test2 = async () => {
await fetch(`api/audits/info`, { headers: { test: "test" } })
.then((response) => {
if (response.status === 200) return response.json();
else throw new Error(response.statusText);
})
.then((data) => {
console.log("data", data);
})
.catch((error) => {
console.log("error", error);
});
};
return (
<>
<Button text={"api test 1"} onClick={test1} />
<Button text={"api test 2"} onClick={test2} />
</>
);
};
export default Main;
api test 1 버튼을 누르면 api/audits API를 호출하고
api test 2 버튼을 누르면 api/audits/info API를 호출
api/audits에서는 status 200, 500 둘 다 에러 아닌 걸로 받아서 then을 탄다
500 받았을 때 에러로 던지고 싶으면.. 던지면 될듯?
node 코드 (백엔드 코드)
api/audits
export default async function handler(req, res) {
await test(req)
.then(val => res.status(200).send(val))
.catch(err => res.status(500).send(err))
}
const test = () => {
return new Promise(async function (resolve, reject) {
try {
throw new Error("throw error");
// resolve({ id: 1, msg: 'test' })
} catch (error) {
reject({ error: 'error' })
}
});
}
지금은 비동기를 사용할 필요는 없지만
실제 개발하다 보면 비동기의 향연이라 기초 코드도 비동기로 구현함
일부러 에러를 발생 시킴
resolve하면 then으로 가고
reject되면 catch를 탄다
node 코드 (백엔드 코드)
api/audits/info
export default async function handler(req, res) {
// console.log(req.headers);
// console.log(req.body);
res.status(200).json(await test(req));
}
const test = () => {
return new Promise(async function (resolve) {
resolve({ id: 2, msg: 'test 2' })
}
);
}
아무 에러 없을 때 일반적인 코드 ?
정석 코드가 뭔진 아직 모르겠음
백엔드 안한지 3년 넘어서 갈 길이 태산
Next.js에서 API Routes와 Server Express 사용해보기
Next.js에서 API Routes와 Server Express 사용해보기
kimsangyeon-github-io.vercel.app
위 글은 next 프로젝트에서의 api routes & express 비교(?) 글
'Web' 카테고리의 다른 글
[Frontend] axios/fetch headers utf8 한글 오류 (0) | 2023.10.13 |
---|---|
[Backend] AWS ec2 서버 시간 설정 (0) | 2023.10.12 |
[Frontend] JWT (0) | 2023.10.04 |
[Frontend] Node.js, Babel, Webpack (1) | 2023.05.19 |
[React] setState, props (0) | 2021.08.31 |