localhost
GET

Handler는 HTTP 요청을 받아들이고 응답을 반환하는 함수입니다.
import { Elysia } from 'elysia'
new Elysia()
// 함수 `() => 'hello world'`가 handler입니다
.get('/', () => 'hello world')
.listen(3000)Handler는 리터럴 값이 될 수 있으며 인라인으로 작성할 수 있습니다.
import { Elysia, file } from 'elysia'
new Elysia()
.get('/', 'Hello Elysia')
.get('/video', file('kyuukurarin.mp4'))
.listen(3000)인라인 값을 사용하면 항상 같은 값을 반환하므로 파일과 같은 정적 리소스의 성능을 최적화하는 데 유용합니다.
이를 통해 Elysia는 응답을 미리 컴파일하여 성능을 최적화할 수 있습니다.
TIP
인라인 값을 제공하는 것은 캐시가 아닙니다.
정적 리소스 값, 헤더 및 상태는 lifecycle을 사용하여 동적으로 변경할 수 있습니다.
Context는 각 요청마다 고유한 요청 정보를 포함하며, store (전역 변경 가능 상태)를 제외하고는 공유되지 않습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/', (context) => context.path)
// ^ 이것이 context입니다Context는 route handler에서만 가져올 수 있습니다. 다음으로 구성됩니다:
타입 narrowing과 함께 사용자 정의 상태 코드를 반환하는 함수입니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ status }) => status(418, "Kirifuji Nagisa"))
.listen(3000)GET
status를 throw하는 대신 반환하는 never-throw 접근 방식을 사용하는 것이 권장됩니다. 이유는 다음과 같습니다:
set은 Context.set을 통해 접근할 수 있는 응답을 형성하는 변경 가능한 속성입니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ set, status }) => {
set.headers = { 'X-Teapot': 'true' }
return status(418, 'I am a teapot')
})
.listen(3000)Object로 표현되는 응답 헤더를 추가하거나 삭제할 수 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ set }) => {
set.headers['x-powered-by'] = 'Elysia'
return 'a mimir'
})
.listen(3000)TIP
Elysia는 대소문자 일관성을 위해 소문자 자동 완성을 제공합니다. 예를 들어 Set-Cookie 대신 set-cookie를 사용하세요.
요청을 다른 리소스로 리디렉션합니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ redirect }) => {
return redirect('https://youtu.be/whpVWVWBW4U?&t=8')
})
.get('/custom-status', ({ redirect }) => {
// 사용자 정의 상태로 리디렉션할 수도 있습니다
return redirect('https://youtu.be/whpVWVWBW4U?&t=8', 302)
})
.listen(3000)redirect를 사용할 때 반환 값은 필요하지 않으며 무시됩니다. 응답은 다른 리소스에서 가져오기 때문입니다.
제공되지 않은 경우 기본 상태 코드를 설정합니다.
특정 상태 코드만 반환해야 하는 플러그인에서 사용자가 사용자 정의 값을 반환할 수 있도록 하는 경우 권장됩니다. 예를 들어 HTTP 201/206 또는 403/405 등입니다.
import { Elysia } from 'elysia'
new Elysia()
.onBeforeHandle(({ set }) => {
set.status = 418
return 'Kirifuji Nagisa'
})
.get('/', () => 'hi')
.listen(3000)status 함수와 달리 set.status는 반환 값 타입을 추론할 수 없으므로 반환 값이 response schema에 올바르게 타입되어 있는지 확인할 수 없습니다.
TIP
HTTP Status는 응답 유형을 나타냅니다. route handler가 오류 없이 성공적으로 실행되면 Elysia는 상태 코드 200을 반환합니다.
상태 코드의 일반 이름을 사용하여 숫자 대신 상태 코드를 설정할 수도 있습니다.
// @errors 2322
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ set }) => {
set.status
return 'Kirifuji Nagisa'
})
.listen(3000)Elysia는 Cookie와 상호작용하기 위한 변경 가능한 signal을 제공합니다.
get/set이 없으며, cookie 이름을 추출하고 그 값을 직접 가져오거나 업데이트할 수 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/set', ({ cookie: { name } }) => {
// Get
name.value
// Set
name.value = "New Value"
})자세한 내용은 Patterns: Cookie를 참조하세요.
요청을 다른 리소스로 리디렉션합니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/', ({ redirect }) => {
return redirect('https://youtu.be/whpVWVWBW4U?&t=8')
})
.get('/custom-status', ({ redirect }) => {
// 사용자 정의 상태로 리디렉션할 수도 있습니다
return redirect('https://youtu.be/whpVWVWBW4U?&t=8', 302)
})
.listen(3000)redirect를 사용할 때 반환 값은 필요하지 않으며 무시됩니다. 응답은 다른 리소스에서 가져오기 때문입니다.
handler에서 직접 form 유틸리티를 반환하여 FormData를 반환할 수 있습니다.
import { Elysia, form, file } from 'elysia'
new Elysia()
.get('/', () => form({
name: 'Tea Party',
images: [file('nagi.web'), file('mika.webp')]
}))
.listen(3000)이 패턴은 파일이나 multipart form data를 반환해야 하는 경우에 유용합니다.
또는 form 없이 file을 직접 반환하여 단일 파일을 반환할 수 있습니다.
import { Elysia, file } from 'elysia'
new Elysia()
.get('/', file('nagi.web'))
.listen(3000)yield 키워드와 함께 generator 함수를 사용하여 즉시 응답 스트리밍을 반환합니다.
import { Elysia } from 'elysia'
const app = new Elysia()
.get('/ok', function* () {
yield 1
yield 2
yield 3
})이 예제에서 yield 키워드를 사용하여 응답을 스트리밍할 수 있습니다.
Elysia는 sse 유틸리티 함수를 제공하여 Server Sent Events를 지원합니다.
import { Elysia, sse } from 'elysia'
new Elysia()
.get('/sse', function* () {
yield sse('hello world')
yield sse({
event: 'message',
data: {
message: 'This is a message',
timestamp: new Date().toISOString()
},
})
})값이 sse로 래핑되면 Elysia는 자동으로 응답 헤더를 text/event-stream으로 설정하고 데이터를 SSE 이벤트로 포맷합니다.
헤더는 첫 번째 청크가 yield되기 전에만 설정할 수 있습니다.
import { Elysia } from 'elysia'
const app = new Elysia()
.get('/ok', function* ({ set }) {
// 이것은 헤더를 설정합니다
set.headers['x-name'] = 'Elysia'
yield 1
yield 2
// 이것은 아무것도 하지 않습니다
set.headers['x-id'] = '1'
yield 3
})첫 번째 청크가 yield되면 Elysia는 헤더를 클라이언트에 보내므로 첫 번째 청크가 yield된 후 헤더를 변경해도 아무 일도 일어나지 않습니다.
yield 없이 응답이 반환되면 Elysia는 자동으로 스트림을 일반 응답으로 변환합니다.
import { Elysia } from 'elysia'
const app = new Elysia()
.get('/ok', function* () {
if (Math.random() > 0.5) return 'ok'
yield 1
yield 2
yield 3
})이를 통해 필요에 따라 조건부로 응답을 스트리밍하거나 일반 응답을 반환할 수 있습니다.
응답 스트리밍이 완료되기 전에 사용자가 요청을 취소하면 Elysia는 자동으로 generator 함수를 중지합니다.
Eden은 스트림 응답을 AsyncGenerator로 해석하여 for await 루프를 사용하여 스트림을 소비할 수 있게 합니다.
import { Elysia } from 'elysia'
import { treaty } from '@elysiajs/eden'
const app = new Elysia()
.get('/ok', function* () {
yield 1
yield 2
yield 3
})
const { data, error } = await treaty(app).ok.get()
if (error) throw error
for await (const chunk of data)
console.log(chunk)Elysia는 Node, Bun, Deno, Cloudflare Worker, Vercel Edge Function 등 여러 런타임 간에 공유되는 Web Standard Request 위에 구축되었습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/user-agent', ({ request }) => {
return request.headers.get('user-agent')
})
.listen(3000)필요한 경우 low-level 요청 정보에 액세스할 수 있습니다.
Server 인스턴스는 Bun 서버 인스턴스로, 포트 번호나 요청 IP와 같은 서버 정보에 액세스할 수 있습니다.
Server는 listen으로 HTTP 서버가 실행 중일 때만 사용할 수 있습니다.
import { Elysia } from 'elysia'
new Elysia()
.get('/port', ({ server }) => {
return server?.port
})
.listen(3000)server.requestIP 메서드를 사용하여 요청 IP를 가져올 수 있습니다
import { Elysia } from 'elysia'
new Elysia()
.get('/ip', ({ server, request }) => {
return server?.requestIP(request)
})
.listen(3000)Elysia는 기본적으로 최소한의 Context를 제공하여 state, decorate, derive, resolve를 사용하여 특정 요구 사항에 맞게 Context를 확장할 수 있습니다.
Context를 확장하는 방법에 대한 자세한 내용은 Extends Context를 참조하세요.