HTTP Request
Introduction
The Request object provides access to HTTP request data in your Lumo Framework applications. It gives you convenient access to user input, headers, cookies, and files submitted by the user.
Interacting With The Request
Accessing The Request
The Request object is automatically injected as the first parameter of your API handler functions:
import { Request, Response } from '@lumo-framework/core'
export function GET(request: Request, response: Response) {
// Access request data
return response.json({ message: 'Hello World' })
}
Request Path, Host, and Method
You can retrieve information about the incoming request using various properties:
export function handler(request: Request, response: Response) {
const method = request.method // GET, POST, PUT, DELETE, etc.
const url = request.url // Full URL
const path = request.path // Path portion only
return response.json({
method,
url,
path
})
}
Request Headers
The headers
property provides access to all request headers:
export function GET(request: Request, response: Response) {
// Access all headers
const allHeaders = request.headers
// Get specific header (case-insensitive)
const contentType = request.header('content-type')
const authorization = request.header('Authorization')
const userAgent = request.header('user-agent')
return response.json({
contentType,
authorization,
userAgent: request.userAgent // Also available as property
})
}
Request IP Address
The client's IP address is available through the ip
property:
export function GET(request: Request, response: Response) {
const clientIp = request.ip
return response.json({
message: `Hello from ${clientIp}`
})
}
Input
Retrieving Input
Query Parameters
Access URL query parameters through the query
property:
export function GET(request: Request, response: Response) {
// URL: /api/users?page=2&limit=10&active=true
const page = request.query.page // "2"
const limit = request.query.limit // "10"
const active = request.query.active // "true"
// With defaults and type conversion
const pageNum = parseInt(request.query.page || '1')
const limitNum = parseInt(request.query.limit || '10')
const isActive = request.query.active === 'true'
return response.json({
page: pageNum,
limit: limitNum,
active: isActive
})
}
Route Parameters
Access dynamic route segments through the params
property:
// File: src/users/[id].ts
export function GET(request: Request, response: Response) {
const userId = request.params.id
return response.json({
message: `Getting user ${userId}`
})
}
// File: src/users/[userId]/posts/[postId].ts
export function GET(request: Request, response: Response) {
const { userId, postId } = request.params
return response.json({
message: `Getting post ${postId} for user ${userId}`
})
}
Request Body
Access the request body using various methods depending on the content type:
export async function POST(request: Request, response: Response) {
// JSON data
const jsonData = await request.json()
// Plain text
const textData = await request.text()
// Form data
const formData = await request.formData()
// Raw buffer
const buffer = await request.buffer()
return response.json({ received: 'ok' })
}
JSON Input
Parse JSON request bodies:
export async function POST(request: Request, response: Response) {
try {
const userData = await request.json()
const { name, email, age } = userData
if (!name || !email) {
return response.status(400).json({
error: 'Name and email are required'
})
}
return response.status(201).json({
message: 'User created',
user: { name, email, age }
})
} catch (error) {
return response.status(400).json({
error: 'Invalid JSON in request body'
})
}
}
Form Data Input
Handle form submissions:
export async function POST(request: Request, response: Response) {
const formData = await request.formData()
const name = formData.name
const email = formData.email
// Handle arrays (multiple values with same name)
const tags = Array.isArray(formData.tags)
? formData.tags
: formData.tags ? [formData.tags] : []
return response.json({
name,
email,
tags
})
}
Cookies
Access request cookies through the cookies
property:
export function GET(request: Request, response: Response) {
// Get all cookies
const allCookies = request.cookies
// Get specific cookie
const sessionId = request.cookies.session_id
const theme = request.cookies.theme || 'light'
return response.json({
sessionId,
theme,
allCookies
})
}