Belajar ElysiaJS - Request, Response & Type Inference
Episode 5 of 21

Belajar ElysiaJS - Request, Response & Type Inference

Memahami object context ctx secara mendalam: params, query, body, headers, cookie, serta berbagai opsi response dari string hingga Response class dan cara mengatur status code serta headers secara dinamis.

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 4 kita menguasai routing — dynamic parameters, query strings, dan route grouping — pada episode ini kita akan memahami bagaimana cara membaca data dari request dan menghasilkan response. ElysiaJS menyediakan object context yang powerful untuk mengakses semua data request secara type-safe.

Memahami Object Context (ctx)

Setiap route handler menerima object context yang berisi semua data dari request. Semua property di context otomatis terekspos berdasarkan schema yang didefinisikan:

Context object: akses semua data request
import { Elysia, t } from 'elysia'
 
const app = new Elysia()
  .post('/user/:id', ({ params, query, body, headers, cookie, set }) => {
    // params: path parameters
    // query: query string
    // body: request body
    // headers: request headers
    // cookie: cookie handler
    // set: response configuration
    return { userId: params.id, name: body.name }
  }, {
    params: t.Object({ id: t.String() }),
    query: t.Object({ format: t.Optional(t.String()) }),
    body: t.Object({
      name: t.String(),
      email: t.String({ format: 'email' }),
    }),
  })
  .listen(3000)

Membaca Headers

Headers diakses melalui object headers — semua header otomatis terekspos sebagai string atau array:

Membaca authorization header
.get('/protected', ({ headers }) => {
  const token = headers.authorization?.split(' ')[1]
  return { token }
})

Cookie diakses melalui object cookie — kalian bisa membaca, menulis, dan menghapus cookie:

Membaca dan menulis cookie
.get('/login', ({ cookie }) => {
  cookie.session.set('abc123', {
    httpOnly: true,
    secure: true,
  })
  return { message: 'Logged in' }
})

Response Type Options

ElysiaJS mendukung berbagai cara mengembalikan response:

String → text/plain

Response string
.get('/', () => 'Hello Elysia!')
// Content-Type: text/plain

Object → application/json

Response JSON object
.get('/user', () => ({
  name: 'John',
  email: 'john@example.com',
}))
// Content-Type: application/json

Response Class

Untuk kontrol penuh, gunakan Response bawaan:

Response dengan Response class
.get('/data', () => {
  return Response.json(
    { users: [] },
    { status: 200, headers: { 'X-Custom': 'value' } }
  )
})

Status Code dan Headers

Gunakan object set untuk mengatur status code dan response headers secara dinamis:

Mengatur status code dan headers
.post('/user', ({ body, set }) => {
  set.status = 201
  set.headers['X-Request-Id'] = crypto.randomUUID()
  return { id: 1, name: body.name }
}, {
  body: t.Object({
    name: t.String(),
    email: t.String(),
  })
})

Atau gunakan new Response untuk kasus yang lebih kompleks:

Response Not Found dengan status code
.get('/user/:id', ({ params, set }) => {
  set.status = 404
  return { error: 'User not found' }
})

Note

ElysiaJS secara otomatis menentukan Content-Type berdasarkan return value. Untuk string → text/plain, object → application/json, Uint8Array → application/octet-stream. Kalian jarang perlu mengatur Content-Type secara manual.

Penutup

Pada episode 5 ini, kalian telah memahami object context secara mendalam — cara membaca data request dan menghasilkan berbagai jenis response.

Inti yang harus dibawa pulang:

  • Context object ctx berisi params, query, body, headers, cookie, dan set.
  • Tiga jenis response utama: string (text/plain), object (JSON), dan Response class.
  • set.status dan set.headers untuk mengatur status code dan headers secara dinamis.
  • Cookie bisa dibaca dan ditulis melalui object cookie di context.
  • Type inference otomatis dari schema ke handler — tidak perlu deklarasi tipe manual.

Di episode 6 selanjutnya kita akan memahami schema validation dengan TypeBox — bagaimana mendefinisikan validasi yang kuat, nested objects, optional fields, dan custom error handling. Sampai jumpa di episode 6!

Belajar ElysiaJS - Request, Response & Type Inference | Belajar ElysiaJS