📖 Scenario: You are building a simple web server using Deno. Your server will receive HTTP requests and send back responses. Understanding how to work with Request and Response objects is essential to handle client-server communication.
🎯 Goal: Build a basic Deno server that reads the incoming Request object, checks the request method, and sends back a Response object with a message.
📋 What You'll Learn
Create a variable to hold the server listener
Add a variable to store the expected HTTP method
Use the Request object to check the method of incoming requests
Send a Response object with a text message based on the request method
💡 Why This Matters
🌍 Real World
Web servers need to handle HTTP requests and send responses correctly. Understanding Request and Response objects is key to building APIs and web applications.
💼 Career
Backend developers and full-stack engineers use these concepts daily to create web services and handle client communication.
Progress0 / 4 steps
1
Create the server listener
Create a variable called server and assign it the result of Deno.listen({ port: 8080 }) to start listening on port 8080.
Deno
Hint
Use Deno.listen with an object specifying port: 8080.
2
Set the expected HTTP method
Add a variable called expectedMethod and set it to the string "GET" to specify the HTTP method your server will handle.
Deno
Hint
Use const expectedMethod = "GET" to store the method.
3
Check the request method
Write an async function called handleRequest that takes a Request object named request. Inside, use an if statement to check if request.method equals expectedMethod. Return a Response with the text "Hello from GET" if true, otherwise return a Response with "Method not allowed" and status 405.
Deno
Hint
Use request.method to check the HTTP method and return appropriate Response objects.
4
Complete the server to handle requests
Add a for await loop over server to accept connections. Inside, create an HTTP connection from each connection using Deno.serveHttp(conn). Then, use another for await loop over httpConn to get each request event. For each event, call handleRequest(event.request) and respond with event.respondWith() using the returned Response.
Deno
Hint
Use nested for await loops to accept connections and handle HTTP requests asynchronously.
Practice
(1/5)
1. What does the Request object represent in a Deno web server?
easy
A. The data sent by the server to the user
B. The server's file system access
C. The server configuration settings
D. The data sent by the user to the server
Solution
Step 1: Understand the role of Request object
The Request object contains information about what the user sends to the server, such as headers, method, and body.
Step 2: Differentiate from Response object
The Response object is what the server sends back, so it is not the Request.
Final Answer:
The data sent by the user to the server -> Option D
Quick Check:
Request = user data [OK]
Hint: Request = user input; Response = server output [OK]
Common Mistakes:
Confusing Request with Response
Thinking Request holds server settings
Assuming Request is server output
2. Which of the following is the correct way to create a Response object with a JSON body in Deno?
easy
A. Response.json(data)
B. new Response(data, { type: 'json' })
C. new Response(data, { headers: { 'Content-Type': 'application/json' } })
D. new Response(data, { contentType: 'application/json' })
Solution
Step 1: Check how to send JSON in Response
In Deno, you can create a Response with JSON by stringifying the data and setting the 'Content-Type' header to 'application/json'.
Step 2: Validate options
new Response(data, { headers: { 'Content-Type': 'application/json' } }) correctly sets the header and passes data (assuming data is stringified). Response.json(data) is invalid because Response.json() is not a standard method in Deno's Response API. Options B and D use incorrect properties.
Final Answer:
new Response(data, { headers: { 'Content-Type': 'application/json' } }) -> Option C
Quick Check:
Response with JSON header [OK]
Hint: Use new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json' } }) [OK]
Common Mistakes:
Passing raw object without stringify
Using incorrect init properties like 'type' or 'contentType'
Assuming Response.json() exists
3. Given the following Deno server code snippet, what will be the response body when a user sends a GET request?
const handler = (req) => {
if (req.method === 'GET') {
return new Response('Hello World');
}
return new Response('Method Not Allowed', { status: 405 });
};
medium
A. "Method Not Allowed"
B. "Hello World"
C. Empty response
D. Error thrown
Solution
Step 1: Check request method condition
The code checks if the request method is 'GET'. If yes, it returns 'Hello World'.
Step 2: Determine response for GET request
Since the user sends a GET request, the first condition matches and returns 'Hello World'.
Final Answer:
"Hello World" -> Option B
Quick Check:
GET request returns 'Hello World' [OK]
Hint: Check req.method to decide response content [OK]
Common Mistakes:
Ignoring method check and picking wrong response
Assuming default response is empty
Thinking error is thrown on GET
4. Identify the error in this Deno request handler code:
const handler = (req) => {
if (req.method = 'POST') {
return new Response('Posted');
}
return new Response('Not Posted');
};
medium
A. Using assignment (=) instead of comparison (===) in if condition
B. Missing await keyword before Response
C. Response body must be JSON, not string
D. req.method is undefined
Solution
Step 1: Check the if condition syntax
The code uses single equals (=) which assigns 'POST' to req.method instead of comparing it.
Step 2: Understand correct comparison operator
To compare, use '===' or '==' instead of '=' to avoid bugs.
Final Answer:
Using assignment (=) instead of comparison (===) in if condition -> Option A
Quick Check:
Use '===' for comparison, not '=' [OK]
Hint: Use '===' for comparisons, '=' is assignment [OK]
Common Mistakes:
Confusing assignment and comparison operators
Thinking Response needs await here
Assuming req.method is missing
5. How can you read JSON data sent in the body of a POST request using the Deno Request object?
hard
A. Use await req.json() to parse the JSON body
B. Use req.body.json() without await
C. Use JSON.parse(req.body) directly
D. Use req.getJson() method
Solution
Step 1: Understand how to parse JSON body in Deno
The Request object has an async method json() that returns the parsed JSON from the body.
Step 2: Confirm correct usage
You must await req.json() because it returns a Promise resolving to the parsed object.
Final Answer:
Use await req.json() to parse the JSON body -> Option A
Quick Check:
await req.json() parses JSON body correctly [OK]
Hint: Always await req.json() to get JSON body [OK]
Common Mistakes:
Calling json() without await
Trying to parse req.body directly
Using non-existent getJson() method
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.