The request object is available on the HttpContext:
import type { HttpContext } from '@adonisjs/core/http'import router from '@adonisjs/core/services/router'router.post('/users', ({ request }: HttpContext) => { // Access request data const body = request.all() return { received: body }})
// Get all body dataconst body = request.all()// Get specific fieldsconst email = request.input('email')const name = request.input('name')// Get with default valueconst role = request.input('role', 'user')// Get only specific fieldsconst data = request.only(['email', 'name', 'password'])// Get all fields except specific onesconst data = request.except(['password', 'password_confirmation'])
// Get specific headerconst contentType = request.header('content-type')const authorization = request.header('authorization')// Get with default valueconst apiKey = request.header('api-key', 'default-key')// Get all headersconst headers = request.headers()
// Full URLconst url = request.url()// Returns: '/users/1?tab=profile'// URL without query stringconst pathname = request.pathname()// Returns: '/users/1'// Get full URL with protocol and hostconst completeUrl = request.completeUrl()// Returns: 'http://localhost:3333/users/1?tab=profile'
const ip = request.ip()// Returns: '127.0.0.1'// Get all IP addresses (including proxy IPs)const ips = request.ips()// Returns: ['127.0.0.1', '192.168.1.1']
// Get specific cookieconst sessionId = request.cookie('session_id')// Get with default valueconst theme = request.cookie('theme', 'light')// Get all cookies as an objectconst cookies = request.cookies()// Get all cookies as an array of objectsconst cookiesList = request.cookiesList()// Returns: [{ name: 'session_id', value: 'abc123' }, ...]
// Check if client accepts JSONif (request.accepts(['json'])) { return response.json({ data })}// Check if client accepts HTMLif (request.accepts(['html'])) { return view.render('users/index', { data })}// Get best matching formatconst format = request.accepts(['json', 'html'])// Returns: 'json' or 'html' based on Accept header
import vine from '@vinejs/vine'const createUserValidator = vine.compile( vine.object({ email: vine.string().email(), name: vine.string().minLength(3), password: vine.string().minLength(8) }))router.post('/users', async ({ request }) => { // Validate and get data const data = await request.validateUsing(createUserValidator) // data is now typed and validated const user = await User.create(data) return { user }})
See the Validation documentation for more details.
Store custom data on the request for use in middleware and handlers:
// In middlewareexport default class AuthMiddleware { async handle({ request }: HttpContext, next: NextFn) { const user = await authenticateUser() // Store user on request context request.ctx.user = user return await next() }}// In route handlerrouter.get('/profile', ({ request }) => { const user = request.ctx.user return { user }})
import { Request } from '@adonisjs/core/http'Request.macro('getUser', function () { return this.ctx.user})// Use in route handlersrouter.get('/profile', ({ request }) => { const user = request.getUser() return { user }})