
- Next.js - Home
- Next.js - Overview
- Next.js - Project Setup
- Next.js - Folder Structure
- Next.js - App Router
- Next.js - Page Router
- Next.js Features
- Next.js - Pages
- Next.js - Data Fetching
- Next.js - ISR
- Next.js - Static File Serving
- Next.js - Pre-Rendering
- Next.js - Partial Pre Rendering
- Next.js - Server Side Rendering
- Next.js - Client Side Rendering
- Next.js Routing
- Next.js - Routing
- Next.js - Nested Routing
- Next.js - Dynamic Routing
- Next.js - Parallel Routing
- Next.js - Imperative Routing
- Next.js - Shallow Routing
- Next.js - Intercepting Routes
- Next.js - Redirecting Routes
- Next.js - Navigation and Linking
- Next.js Configuration
- Next.js - TypeScript
- Next.js - Environment Variables
- Next.js - File Conventions
- Next.js - ESLint
- Next.js API & Backend
- Next.js - API Routes
- Next.js - Dynamic API Routes
- Next.js - Route Handlers
- Next.js - API MiddleWares
- Next.js - Response Helpers
- Next.js API Reference
- Next.js - CLI Commands
- Next.js - Functions
- Next.js - Directives
- Next.js - Components
- Next.js - Image Component
- Next.js - Font Component
- Next.js - Head Component
- Next.js - Form Component
- Next.js - Link Component
- Next.js - Script Component
- Next.js Styling & SEO
- Next.js - CSS Support
- Next.js - Global CSS Support
- Next.js - Meta Data
- Next.js Advanced Topics
- Next.js - Error Handling
- Next.js - Server Actions
- Next.js - Fast Refresh
- Next.js - Internationalization
- Next.js - Authentication
- Next.js - Session Management
- Next.js - Authorization
- Next.js - Caching
- Next.js - Data Caching
- Next.js - Router Caching
- Next.js - Full Route Caching
- Next.js - Request Memoization
- Next.js Performance Optimization
- Next.js - Optimizations
- Next.js - Image Optimization
- Next.js - Lazy Loading
- Next.js - Font Optimization
- Next.js - Video Optimization
- Next.js - Script Optimization
- Next.js - Memory Optimization
- Next.js - Using OpenTelemetry
- Next.js - Package Bundling Optimization
- Next.js Testing
- Next.js - Testing
- Next.js - Testing with Jest
- Next.js - Testing with Cypress
- Next.js - Testing with Vitest
- Next.js - Testing with Playwright
- Next.js Debugging & Deployment
- Next.js - Debugging
- Next.js - Deployment
- Next.js Useful Resources
- Next.js - Interview Questions
- Next.js - Quick Guide
- Next.js - Useful Resources
- Next.js - Discussion
Next.js - NextRequest
The NextRequest
The Next.js NextRequest class extends the native Web Request API to provide additional functionality and methods to handle HTTP requests in Next.js applications.
Syntax
Following is the syntax of NextRequest class:
class NextRequest extends Request { constructor(input: RequestInfo | URL, init?: RequestInit) }
Parameters
The NextRequest class takes two parameters:
- input Either a URL string, Request object, or URL object representing the request URL
- init (optional): An object containing custom configurations
Return Value
The NextRequest method will return a new NextRequest instance with the following additional methods:
- cookies Access to request cookies
- nextUrl Parsed URL with additional utility methods
- geo Geographic information about the request
- ip Client's IP address
Key Points
- NextRequest is only available in Edge Runtime
- Provides enhanced functionality over standard Request object
- Cannot be used in API Routes (pages/api), only in App Router
- Useful for handling cookies, URL manipulation, and geolocation data
- Commonly used with NextResponse for complete request/response handling
Example 1
In the code below, we demonstrate how to use the NextRequest class to access request cookies, query parameters, and geolocation data in a Next.js application.
// app/api/hello/route.ts import { NextRequest, NextResponse } from 'next/server' export async function GET(request: NextRequest) { const searchParams = request.nextUrl.searchParams const query = searchParams.get('query') const cookies = request.cookies.get('user-token') return NextResponse.json({ query: query, cookieExists: !!cookies, clientCountry: request.geo?.country }) }
Example 2
In the code below, we demonstrate how to use the NextRequest class to access the client's IP address and perform URL manipulation in a Next.js application.
// app/api/hello/route.ts import { NextRequest, NextResponse } from 'next/server' export async function GET(request: NextRequest) { const clientIp = request.ip const nextUrl = request.nextUrl const path = nextUrl.pathname // Get query parameters const searchParams = nextUrl.searchParams const queryExample = searchParams.get('example') || 'no query provided' // Get headers const userAgent = request.headers.get('user-agent') const host = request.headers.get('host') // Get cookies const cookies = request.cookies const cookieExample = cookies.get('example')?.value // Get geo information const geo = request.geo || { country: undefined, region: undefined, city: undefined } return NextResponse.json({ clientIp: clientIp, path: path, fullUrl: nextUrl.href, searchParams: Object.fromEntries(searchParams.entries()), headers: { userAgent, host }, cookies: { example: cookieExample }, geo: { country: geo.country, region: geo.region, city: geo.city } }, { status: 200, headers: { 'Cache-Control': 'no-store', 'Content-Type': 'application/json' } }) } // Add OPTIONS handler for CORS if needed export async function OPTIONS(request: NextRequest) { return NextResponse.json({}, { status: 200, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type, Authorization' } }) }
Advertisements