localhost
GET

웹 서버는 요청의 경로와 메서드를 사용하여 올바른 리소스를 찾습니다. 이를 "라우팅"이라고 합니다.
HTTP 동사 메서드, 경로 및 일치할 때 실행할 함수로 경로를 정의할 수 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/', 'hello')
.get('/hi', 'hi')
.listen(3000)http://localhost:3000으로 이동하여 웹 서버에 액세스할 수 있습니다.
기본적으로 웹 브라우저는 페이지를 방문할 때 GET 메서드를 보냅니다.
GET
TIP
위의 대화형 브라우저를 사용하여 파란색 강조 영역 위로 마우스를 가져가면 각 경로 간의 다른 결과를 볼 수 있습니다.
Elysia의 경로는 3가지 유형으로 그룹화할 수 있습니다:
모든 경로 유형을 함께 사용하여 웹 서버의 동작을 구성할 수 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/id/1', 'static path')
.get('/id/:id', 'dynamic path')
.get('/id/*', 'wildcard path')
.listen(3000)GET
정적 경로는 서버에서 리소스를 찾기 위한 하드코딩된 문자열입니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/hello', 'hello')
.get('/hi', 'hi')
.listen(3000)동적 경로는 일부를 일치시키고 값을 캡처하여 추가 정보를 추출합니다.
동적 경로를 정의하려면 콜론 :과 그 뒤에 이름을 사용할 수 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/id/:id', ({ params: { id } }) => id)
.listen(3000)여기서 동적 경로는 /id/:id로 생성됩니다. 이는 Elysia에게 /id/1, /id/123, /id/anything과 같은 값으로 :id 세그먼트의 값을 캡처하도록 지시합니다.
GET
요청 시 서버는 다음과 같이 응답해야 합니다:
| Path | Response |
|---|---|
| /id/1 | 1 |
| /id/123 | 123 |
| /id/anything | anything |
| /id/anything?name=salt | anything |
| /id | Not Found |
| /id/anything/rest | Not Found |
동적 경로는 나중에 사용할 수 있는 ID와 같은 것을 포함하는 데 적합합니다.
명명된 변수 경로를 경로 매개변수 또는 줄여서 params라고 합니다.
원하는 만큼 많은 경로 매개변수를 가질 수 있으며, 그러면 params 객체에 저장됩니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/id/:id', ({ params: { id } }) => id)
.get('/id/:id/:name', ({ params: { id, name } }) => id + ' ' + name)
.listen(3000)GET
서버는 다음과 같이 응답합니다:
| Path | Response |
|---|---|
| /id/1 | 1 |
| /id/123 | 123 |
| /id/anything | anything |
| /id/anything?name=salt | anything |
| /id | Not Found |
| /id/anything/rest | anything rest |
때때로 정적 경로와 동적 경로가 같은 핸들러를 해결하기를 원할 수 있습니다.
매개변수 이름 뒤에 물음표 ?를 추가하여 경로 매개변수를 선택적으로 만들 수 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/id/:id?', ({ params: { id } }) => `id ${id}`)
.listen(3000)GET
동적 경로는 단일 세그먼트를 캡처할 수 있지만 와일드카드는 경로의 나머지 부분을 캡처할 수 있습니다.
와일드카드를 정의하려면 별표 *를 사용할 수 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/id/*', ({ params }) => params['*'])
.listen(3000)GET
Elysia는 다음과 같은 경로 우선순위를 가집니다:
경로가 정적 경로로 해결되고 동적 경로가 있는 경우, Elysia는 동적 경로가 아닌 정적 경로를 해결합니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/id/1', 'static path')
.get('/id/:id', 'dynamic path')
.get('/id/*', 'wildcard path')
.listen(3000)GET
HTTP는 주어진 리소스에 대해 수행할 원하는 작업을 나타내기 위한 일련의 요청 메서드를 정의합니다.
여러 HTTP 동사가 있지만 가장 일반적인 것은 다음과 같습니다:
GET을 사용하는 요청은 데이터만 검색해야 합니다.
지정된 리소스에 페이로드를 제출하여 종종 상태 변경이나 부작용을 일으킵니다.
요청의 페이로드를 사용하여 대상 리소스의 모든 현재 표현을 대체합니다.
리소스에 부분 수정을 적용합니다.
지정된 리소스를 삭제합니다.
각각의 다른 동사를 처리하기 위해 Elysia는 Elysia.get과 유사하게 기본적으로 여러 HTTP 동사에 대한 내장 API를 가지고 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/', 'hello')
.post('/hi', 'hi')
.listen(3000)GET
Elysia HTTP 메서드는 다음 매개변수를 받습니다:
HTTP 메서드에 대해 더 자세히 알아보려면 HTTP Request Methods를 참조하세요.
Elysia.route를 사용하여 사용자 정의 HTTP 메서드를 허용할 수 있습니다.
import { Elysia } from 'elysia'
const app = new Elysia()
.get('/get', 'hello')
.post('/post', 'hi')
.route('M-SEARCH', '/m-search', 'connect')
.listen(3000)GET
Elysia.route는 다음을 받습니다:
Elysia는 Elysia.get 및 Elysia.post와 동일한 API를 사용하여 지정된 경로에 대한 모든 HTTP 메서드를 처리하기 위한 Elysia.all을 제공합니다.
import { Elysia } from 'elysia'
new Elysia()
.all('/', 'hi')
.listen(3000)GET
경로와 일치하는 모든 HTTP 메서드는 다음과 같이 처리됩니다:
| Path | Method | Result |
|---|---|---|
| / | GET | hi |
| / | POST | hi |
| / | DELETE | hi |
대부분의 개발자는 API를 테스트하기 위해 Postman, Insomnia 또는 Hoppscotch와 같은 REST 클라이언트를 사용합니다.
그러나 Elysia는 Elysia.handle을 사용하여 프로그래밍 방식으로 테스트할 수 있습니다.
import { Elysia } from 'elysia'
const app = new Elysia()
.get('/', 'hello')
.post('/hi', 'hi')
.listen(3000)
app.handle(new Request('http://localhost/')).then(console.log)Elysia.handle은 서버로 전송된 실제 요청을 처리하는 함수입니다.
TIP
단위 테스트의 모의와 달리 서버로 전송된 실제 요청처럼 동작할 것으로 기대할 수 있습니다.
그러나 단위 테스트를 시뮬레이션하거나 만드는 데도 유용합니다.
웹 서버를 만들 때 동일한 접두사를 공유하는 여러 경로가 있는 경우가 많습니다:
import { Elysia } from 'elysia'
new Elysia()
.post('/user/sign-in', 'Sign in')
.post('/user/sign-up', 'Sign up')
.post('/user/profile', 'Profile')
.listen(3000)POST
이는 Elysia.group으로 개선할 수 있으며, 여러 경로를 함께 그룹화하여 동시에 접두사를 적용할 수 있습니다:
import { Elysia } from 'elysia'
new Elysia()
.group('/user', (app) =>
app
.post('/sign-in', 'Sign in')
.post('/sign-up', 'Sign up')
.post('/profile', 'Profile')
)
.listen(3000)POST
이 코드는 첫 번째 예제와 동일하게 동작하며 다음과 같이 구성되어야 합니다:
| Path | Result |
|---|---|
| /user/sign-in | Sign in |
| /user/sign-up | Sign up |
| /user/profile | Profile |
.group()은 그룹과 가드를 함께 사용하는 보일러플레이트를 줄이기 위해 선택적 가드 매개변수를 받을 수도 있습니다:
import { Elysia, t } from 'elysia'
new Elysia()
.group(
'/user',
{
body: t.Literal('Rikuhachima Aru')
},
(app) => app
.post('/sign-in', 'Sign in')
.post('/sign-up', 'Sign up')
.post('/profile', 'Profile')
)
.listen(3000)그룹화된 가드에 대한 자세한 정보는 scope에서 확인할 수 있습니다.
생성자에 prefix를 제공하여 그룹을 별도의 플러그인 인스턴스로 분리하여 중첩을 줄일 수 있습니다.
import { Elysia } from 'elysia'
const users = new Elysia({ prefix: '/user' })
.post('/sign-in', 'Sign in')
.post('/sign-up', 'Sign up')
.post('/profile', 'Profile')
new Elysia()
.use(users)
.get('/', 'hello world')
.listen(3000)GET