Context (ctx)
The Context object (ctx) is the central interface for handling HTTP requests in Jetpath. It provides:
- Access to request data (body, query, params)
- Tools for crafting responses
- Integration with plugins and validation
- State management for the request lifecycle
Usage Examples
Basic Request
// Basic route handler
export const GET_user = async (ctx) => {
// Access query parameters
const page = ctx.query.page || '1';
// Get request headers
const authHeader = ctx.get('Authorization');
// Send JSON response
ctx.send({
message: 'Success',
page: parseInt(page)
});
}
File Upload with Validation
// Using ctx.parse() for file uploads with validation
export const POST_upload = async (ctx) => {
const data = await ctx.parse({
maxBodySize: 10 * 1024 * 1024, // 10MB limit
contentType: 'multipart/form-data'
});
// Validate file data
if (!data.files || !data.files.file) {
ctx.send( 'No file uploaded',400);
return
}
ctx.send({ message: 'Files uploaded successfully' });
}
WebSocket Connection
// WebSocket route handler
export const GET_live = async (ctx) => {
// Upgrade to WebSocket
ctx.upgrade();
// Access WebSocket connection
const conn = ctx.connection!;
// Handle WebSocket events
conn.addEventListener('message', (data) => {
// Handle incoming messages
});
conn.addEventListener('close', () => {
// Handle connection close
});
}
Best Practices
- Type Safety: Use generics to define expected data shapes
- Error Handling: Use
ctx.send(error, <http status code>)for HTTP errors - State Management: Use
ctx.statefor request-scoped data and attach user info if authenticated - Security: Always validate input data and implement proper authentication
- Response Handling: Use appropriate methods for different response types and include request ID in headers
- Logging: Use
ctx.plugins.loggerfor detailed request logging with request ID and duration - Headers: Add standard response headers including X-Request-ID and X-Response-Time
Key Features
Request Data Access
await ctx.parse(): Parsed request body datactx.parseQuery(): URL query parametersparams: Route parameters- All type-safe based on
JetDatageneric plugins: Returns the plugin object
Response Handling
send(): Send response datasendStream(): Stream filesdownload(): Force file downloadsendResponse(): Send raw Response object
Navigation
redirect(): Redirect requests- Sets appropriate headers
- Ends request cycle
Headers & Cookies
get(): Get request headersset(): Set response headers- Cookie methods:
getCookie(),setCookie(),clearCookie()
WebSocket
upgrade(): Upgrade to WebSocketconnection: WebSocket interface- Handles WebSocket lifecycle
Additional Properties
request: Request objectconnection: jet_socket objectcode: HTTP status codepath: Request pathpayload: Request payload