API를 바로 추가할 수 있는 기능이다. 원래는 express 서버를 따로 배포하여 사용해야 했지만, Nextjs에서 바로 express로 추가하여 api 서버를 만들어서 vercel로 배포하면 된다.
Nextjs 13기준 Route Handler
page와 같은 위치에 route.ts
를 사용해도 되지만, 가끔 안되는 경우가 있기에 api폴더 내에 만들어준다.
-> 서버 에러가 발생한다.
app/api/route.ts
import { NextResponse } from "next/server";
export const GET = () => {
return NextResponse.json({ message: "Hello World" });
};
/*
export const HTTP메서드 = () => {
};
*/
HTTP메서드를 사용하여 사용한다.
로컬url/api
에 접근해보면 {"message": "Hello World"}
가 출력되는 것을 확인할 수 있다.
route handler를 사용하여 호출할 수 있다. 주로 API 토큰같은 민감한 정보를 클라이언트에 노출시키고 싶지 않을 때 사용한다.
루트 폴더에 middleware.ts 를 생성하여 다양한 미들웨어 작업이 가능
NextResponse.redirect
특정 url로 접근할 때 자동으로 설정된 URL로 이동할 수 있다.
ping페이지와 pong페이지가 있는데 ping 요청이 들어오면 pong으로 연결되도록 해주기
→ 안쓰는 url같은거 처리
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
export function middleware(request: NextRequest) {
const currentUrl = request.nextUrl.clone();
if (request.nextUrl.pathname === "/ping") {
currentUrl.pathname = "/pong";
return NextResponse.redirect(currentUrl);
}
}
url은 변하지 않지만, 컨텐츠만 설정된 url의 컨텐츠로 보이게 해주고 싶을 때 사용한다.
ex) AB 테스트
ping페이지로 요청을 보내는데 pong으로 rewrite를 하면 url이 변하지는 않지만 컨텐츠는 pong이 나온다!!
같은 url로 주지만 사람에 따라 다른 페이지를 보여주는 등
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
export function middleware(request: NextRequest) {
const currentUrl = request.nextUrl.clone();
if(request.nextUrl.pathname === "/ping") {
currentUrl.pathname = "/posts/new";
return NextResponse.rewrite(currentUrl);
}
}
https://velog.io/@jay/series/nextjs13-master-course
이분이 자세하게 nextjs13에 대한 설명을 해주신 것 같다. 나중에 전부 읽어봐야지
운영체제의 모드에 따라 css가 적용된다.
@media (prefers-color-scheme: light) {
/* 라이트 모드에 적용될 css 정의 */
}
@media (prefers-color-scheme: dark) {
/* 다크 모드에 적용될 css 정의 */
}