HttpRequest
HttpRequest is the interface for incoming HTTP requests in OPRA. It extends Node.js http.IncomingMessage with Express-compatible helpers for routing metadata, content negotiation, and body reading.
import type { HttpRequest } from '@opra/http';
In operation handlers, ctx.request is an HttpRequest. See HttpContext.
The runtime implementation is provided by HttpRequestHost, which is mixed into a plain http.IncomingMessage via HttpRequest.create(). You do not construct or import HttpRequestHost directly.
Properties
| Property | Type | Description |
|---|---|---|
res | HttpResponse | The paired response object. |
baseUrl | string | The URL prefix at which the router is mounted. |
originalUrl | string | The full original URL before any path rewriting. |
protocol | string | 'http' or 'https'. Respects X-Forwarded-Proto when trust proxy is enabled. |
ip | string | Remote IP address. Respects trusted proxy headers. |
ips | string[] | IP addresses in the proxy chain when trust proxy is enabled. |
secure | boolean | true when protocol === 'https'. |
secret | string | undefined | Used for signed cookies. |
hostname | string | undefined | Hostname from the Host header. Respects X-Forwarded-Host when trust proxy is enabled. |
fresh | boolean | true when Last-Modified and/or ETag headers match, indicating the client cache is current. |
params | Record<string, any> | Raw path parameter values from the router. |
cookies | Record<string, any> | undefined | Raw cookies (populated when cookie-parser middleware is used). |
Methods
header(name) / get(name)
header(name: string): string | undefined
get(name: string): string | undefined
Returns the value of a named request header. Case-insensitive. 'Referrer' and 'Referer' are treated as equivalent.
const token = ctx.request.header('authorization');
const ct = ctx.request.get('content-type');
is(type)
is(type: string | string[]): string | false | null
Checks whether the Content-Type header matches the given MIME type, extension, or wildcard pattern.
ctx.request.is('json') // 'json' or false
ctx.request.is(['json', 'html'])
ctx.request.is('multipart/*')
accepts(...types)
accepts(): string[]
accepts(type: string): string | false
accepts(type: string[]): string | false
accepts(...type: string[]): string | false
Content negotiation based on the Accept header. Returns the best match from the given types, or false.
Similarly: acceptsCharsets(), acceptsEncodings(), acceptsLanguages(), characterEncoding().
range(size, options?)
range(size: number, options?: RangeParserOptions): RangeParserRanges | RangeParserResult | undefined
Parses the Range header for range requests. Returns ranges capped to size, or undefined if the header is absent.
readBody(options?)
readBody(options?: BodyReader.Options): Promise<string | Buffer | undefined>
Reads the raw request body. Used internally by HttpContext.getBody(). Prefer ctx.getBody() in operation handlers.
Namespace
HttpRequest.create(instance)
HttpRequest.create(
instance: http.IncomingMessage | IncomingMessageHost.Initiator
): HttpRequest
Upgrades a plain http.IncomingMessage (or an IncomingMessageHost.Initiator plain object) into a full HttpRequest by mixing in HttpRequestHost methods. If instance is already an HttpRequest, it is returned as-is.
import http from 'http';
import { HttpRequest } from '@opra/http';
const raw = new http.IncomingMessage(socket);
const req = HttpRequest.create(raw);
Used by adapters and in tests. You rarely need to call this directly in application code.