Status

상태 코드는 서버가 요청을 처리하는 방법을 나타내는 지표입니다.

존재하지 않는 페이지를 방문할 때 유명한 404 Not Found에 대해 들어봤을 것입니다.

그것이 상태 코드입니다.

기본적으로 Elysia는 성공적인 요청에 대해 200 OK를 반환합니다.

Elysia는 다음과 같은 상황에 따라 다양한 상태 코드도 반환합니다:

  • 400 Bad Request
  • 422 Unprocessable Entity
  • 500 Internal Server Error

status 함수로 응답을 반환하여 상태 코드를 반환할 수도 있습니다.

typescript
import { Elysia } from 'elysia'

new Elysia()
	.get('/', ({ status }) => status(418, "I'm a teapot'"))
	.listen(3000)

자세한 내용은 Status를 참조하세요.

Redirect

마찬가지로 redirect 함수를 반환하여 요청을 다른 URL로 리디렉션할 수도 있습니다.

typescript
import { Elysia } from 'elysia'

new Elysia()
	.get('/', ({ redirect }) => redirect('https://elysiajs.com'))
	.listen(3000)

자세한 내용은 Redirect를 참조하세요.

Headers

직접 반환할 수 있는 상태 코드 및 리디렉션과 달리.

애플리케이션에서 헤더를 여러 번 설정해야 할 가능성이 높습니다.

그렇기 때문에 Elysia는 headers 함수를 반환하는 대신 헤더를 설정하기 위한 set.headers 객체를 제공합니다.

typescript
import { Elysia } from 'elysia'

new Elysia()
	.get('/', ({ set }) => {
		set.headers['x-powered-by'] = 'Elysia'

		return 'Hello World'
	})
	.listen(3000)

headers요청 헤더이므로 Elysia는 응답 헤더에 대해 set.headers를 접두사로 사용하여 요청 헤더와 응답 헤더를 구분합니다.

자세한 내용은 Headers를 참조하세요.

과제

배운 내용을 실습해 봅시다.

  1. Return a 418 Status

    Let's create a GET `/` endpoint that returns 418 status

  2. Create a Redirect

    Redirect a GET `/docs` endpoint to `https://elysiajs.com`

  3. Add Powered By Header

    In GET `/` endpoint, return a custom header `x-powered-by` set to `Elysia`

Show answer
  1. 상태 코드를 418 I'm a teapot으로 설정하려면 status 함수를 사용할 수 있습니다.
  2. /docshttps://elysiajs.com으로 리디렉션하려면 redirect 함수를 사용할 수 있습니다.
  3. 사용자 정의 헤더 x-powered-byElysia로 설정하려면 set.headers 객체를 사용할 수 있습니다.
typescript
import { Elysia } from 'elysia'

new Elysia()
	.get('/', ({ status, set }) => {
		set.headers['x-powered-by'] = 'Elysia'

		return status(418, 'Hello Elysia!')
	})
	.get('/docs', ({ redirect }) => redirect('https://elysiajs.com'))
	.listen(3000)
  • index.ts

Error

Error: No Elysia server is running in index.ts
Did you forget to call `.listen()`?
    at parse (file:///vercel/path0/docs/.vitepress/.temp/utils.J44kKQwQ.js:202:66)
    at file:///vercel/path0/docs/.vitepress/.temp/utils.J44kKQwQ.js:240:30
    at new Promise (<anonymous>)
    at execute (file:///vercel/path0/docs/.vitepress/.temp/utils.J44kKQwQ.js:238:49)
    at Proxy.run (file:///vercel/path0/docs/.vitepress/.temp/store.CFqL75-f.js:190:51)
    at Proxy.wrappedAction (file:///vercel/path0/node_modules/pinia/dist/pinia.mjs:1394:26)
    at setup (file:///vercel/path0/docs/.vitepress/.temp/playground.eEZCBItr.js:133:50)
    at playground_vue_vue_type_script_setup_true_lang_default.setup (file:///vercel/path0/docs/.vitepress/.temp/playground.eEZCBItr.js:438:22)
    at callWithErrorHandling (/vercel/path0/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js:86:19)
    at setupStatefulComponent (/vercel/path0/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js:6365:25)