Request and response handling lets your website talk with users and servers. It helps you get data from users and send back the right pages or information.
Request and response handling in Astro
export async function GET(context) { const { request, params } = context; // handle GET request return new Response('Hello from GET'); } export async function POST(context) { const { request } = context; const data = await request.json(); // handle POST request return new Response(JSON.stringify({ message: 'Data received' }), { headers: { 'Content-Type': 'application/json' } }); }
Astro uses special exported functions like GET and POST to handle requests.
The context object gives you access to the request and parameters.
export async function GET() { return new Response('Hello World'); }
export async function POST({ request }) { const data = await request.json(); return new Response(JSON.stringify({ received: data }), { headers: { 'Content-Type': 'application/json' } }); }
export async function GET({ params }) { return new Response(`You asked for item ${params.id}`); }
This component handles GET requests by greeting the user with a name from the URL query. It handles POST requests by reading a JSON message and replying with it.
export async function GET({ request }) { const url = new URL(request.url); const name = url.searchParams.get('name') || 'Guest'; return new Response(`Hello, ${name}! Welcome to Astro.`); } export async function POST({ request }) { const data = await request.json(); const message = data.message || 'No message sent'; return new Response(JSON.stringify({ reply: `You said: ${message}` }), { headers: { 'Content-Type': 'application/json' } }); }
Always set the correct Content-Type header in your responses to help browsers understand the data.
Use request.json() to read JSON data sent by the client in POST requests.
URL parameters and query strings help customize responses based on user input.
Request and response handling lets your Astro site talk with users and servers.
Use exported functions like GET and POST to handle different request types.
Access request data and send back responses with text or JSON as needed.
Practice
Solution
Step 1: Understand HTTP methods in Astro
Astro uses exported functions named after HTTP methods to handle requests.Step 2: Identify the function for GET requests
The function namedGEThandles HTTP GET requests specifically.Final Answer:
GET -> Option BQuick Check:
GET function handles GET requests [OK]
- Confusing GET with POST function
- Using FETCH instead of GET
- Trying to use HANDLE which is not a valid function
Solution
Step 1: Check function naming and export syntax
Astro requires exported functions named exactly as HTTP methods in uppercase, e.g.,POST.Step 2: Validate function signature and return type
The function should be async and return a Response object or similar.Final Answer:
export async function POST({ request }) { return new Response('ok'); } -> Option AQuick Check:
Correct export and async POST function [OK]
- Using lowercase function name 'post'
- Returning string directly instead of Response
- Wrong function name like 'handlePOST'
export async function GET() {
return new Response(JSON.stringify({ message: 'Hello' }), {
headers: { 'Content-Type': 'application/json' }
});
}Solution
Step 1: Analyze the returned Response object
The handler returns a Response with JSON stringified object and content-type header set to application/json.Step 2: Determine the response body content
The body will be the JSON string: '{"message":"Hello"}'.Final Answer:
{"message":"Hello"} -> Option AQuick Check:
JSON string response body = {"message":"Hello"} [OK]
- Expecting plain text 'Hello' instead of JSON string
- Confusing object with string output
- Missing Content-Type header causing wrong parsing
export async function POST(request) {
const data = await request.json();
return new Response('Received');
}Solution
Step 1: Check function parameter structure
Astro passes an object with arequestproperty, not the request directly.Step 2: Confirm correct parameter destructuring
The function should be declared asPOST({ request })to access the request object.Final Answer:
The parameter should be an object with a request property -> Option DQuick Check:
Function parameter must destructure { request } [OK]
- Using request directly instead of destructuring
- Forgetting async keyword
- Returning plain text is allowed, not an error
Solution
Step 1: Correctly destructure request parameter
The function must accept an object and destructurerequestto access the request data.Step 2: Parse JSON body and create JSON response
Useawait request.json()to get the JSON data, then respond with a JSON string including the greeting.Step 3: Set proper Content-Type header
Response must have header'Content-Type': 'application/json'for JSON response.Final Answer:
export async function POST({ request }) { const { name } = await request.json(); return new Response(JSON.stringify({ greeting: `Hello, ${name}!` }), { headers: { 'Content-Type': 'application/json' } }); } -> Option CQuick Check:
Destructure request, await json(), respond with JSON [OK]
- Not destructuring request parameter
- Using request.text() instead of request.json()
- Missing Content-Type header for JSON response
Ready to prove it?
Pass the test and this pattern moves unknown
