📖 Scenario: You want to create a simple web server that responds to HTTP requests with a friendly message. This is useful for learning how servers work and how to handle web requests.
🎯 Goal: Build a basic HTTP server using Deno.serve that listens on port 8000 and responds with a plain text message.
📋 What You'll Learn
Create a handler function that returns a response
Use Deno.serve to start the server on port 8000
Respond with the exact text: 'Hello from Deno!'
Use modern Deno syntax and patterns
💡 Why This Matters
🌍 Real World
Creating simple web servers to serve content or APIs is a common task in web development and backend programming.
💼 Career
Understanding how to handle HTTP requests and responses is essential for backend developers, full-stack developers, and anyone working with web services.
Progress0 / 4 steps
1
Create a handler function
Write a function called handler that takes a Request object as a parameter and returns a new Response with the text 'Hello from Deno!'.
Deno
Hint
Use new Response('Hello from Deno!') to create the response.
2
Start the server with Deno.serve
Use Deno.serve to start the server on port 8000 and pass the handler function as the request handler.
Deno
Hint
Call Deno.serve with an options object specifying port: 8000 and the handler function.
3
Add content-type header for plain text
Modify the handler function to return a Response with a Content-Type header set to text/plain; charset=utf-8.
Deno
Hint
Pass a second argument to new Response with a headers object.
4
Add a console log to confirm server start
Add a line to log 'Server running on http://localhost:8000' to the console after starting the server.
Deno
Hint
Use console.log after Deno.serve to print the message.
Practice
(1/5)
1. What does Deno.serve primarily do in a Deno application?
easy
A. It creates a simple HTTP server that listens for requests.
B. It compiles TypeScript code into JavaScript.
C. It manages database connections automatically.
D. It formats JSON data for API responses.
Solution
Step 1: Understand the purpose of Deno.serve
Deno.serve is designed to start an HTTP server that listens for incoming requests.
Step 2: Compare options with this purpose
Only It creates a simple HTTP server that listens for requests. describes creating an HTTP server. Other options describe unrelated tasks.
Final Answer:
It creates a simple HTTP server that listens for requests. -> Option A
Quick Check:
Deno.serve creates HTTP server [OK]
Hint: Deno.serve starts a server to handle HTTP requests [OK]
Common Mistakes:
Confusing Deno.serve with code compilation
Thinking it manages databases
Assuming it formats data automatically
2. Which of the following is the correct way to use Deno.serve to respond with "Hello World" to every request?
easy
A. Deno.serve(() => new Response.text("Hello World"));
B. Deno.serve(request => Response("Hello World"));
C. Deno.serve(() => Response.text("Hello World"));
D. Deno.serve(() => new Response("Hello World"));
Solution
Step 1: Check the correct Response object creation
In Deno, to send a response, you create a new Response object with the body text.
Step 2: Validate syntax of each option
Deno.serve(() => new Response("Hello World")); correctly uses new Response("Hello World"). Options A, B, and C misuse Response creation or methods.
Final Answer:
Deno.serve(() => new Response("Hello World")); -> Option D
Quick Check:
Use new Response() to send reply [OK]
Hint: Always use new Response() to send HTTP replies [OK]
Common Mistakes:
Omitting 'new' keyword before Response
Using Response as a function instead of a constructor
Calling non-existent Response.text method
3. What will the following code output when accessed via a browser?
import { serve } from "https://deno.land/std/http/server.ts";
Deno.serve(req => {
if (req.url.endsWith("/json")) {
return new Response(JSON.stringify({ message: "Hi" }), {
headers: { "Content-Type": "application/json" },
});
}
return new Response("Not JSON");
});
medium
A. The browser shows: Not JSON
B. The browser shows: {"message":"Hi"} with JSON content type
C. The browser shows a 404 error
D. The server crashes with an error
Solution
Step 1: Analyze the request URL condition
The code checks if the URL ends with '/json'. If yes, it returns JSON; otherwise, it returns "Not JSON".
Step 2: Determine the output for a normal browser request
A browser accessing the root URL (e.g., http://localhost:8000/) does not end with '/json', so it returns "Not JSON" as plain text.
Final Answer:
The browser shows: Not JSON -> Option A
Quick Check:
URL ends with '/json'? No = "Not JSON" [OK]
Hint: Check URL endings carefully to predict response [OK]
Common Mistakes:
Assuming all requests return JSON
Ignoring URL path in condition
Expecting server errors without syntax issues
4. Identify the error in this Deno.serve usage:
Deno.serve(async (req) => {
const data = await req.json();
return new Response(data);
});
medium
A. Cannot call req.json() on a Request object
B. Response constructor expects a string or Uint8Array, not an object
C. Missing await before new Response()
D. Deno.serve does not support async functions
Solution
Step 1: Understand req.json() usage
Calling await req.json() correctly parses JSON body from the request.
Step 2: Check Response constructor argument
The Response constructor expects a string or binary data, but data is an object, causing a type error.
Final Answer:
Response constructor expects a string or Uint8Array, not an object -> Option B
Quick Check:
Response body must be string or bytes, not object [OK]
Hint: Always stringify objects before passing to Response [OK]
Common Mistakes:
Passing raw object to Response instead of string
Thinking req.json() is invalid on Request
Assuming async functions are unsupported
5. You want to create a Deno server that responds with "Hello, {name}!" where {name} is a query parameter from the URL (e.g., /?name=Alice). Which code snippet correctly implements this?
hard
A. Deno.serve(req => {
const url = req.url;
const name = url.params.name || 'Guest';
return new Response(`Hello, ${name}!`);
});
B. Deno.serve(req => {
const name = req.query.name || 'Guest';
return new Response(`Hello, ${name}!`);
});
C. Deno.serve(req => {
const url = new URL(req.url);
const name = url.searchParams.get('name') || 'Guest';
return new Response(`Hello, ${name}!`);
});
D. Deno.serve(req => {
const name = req.get('name') || 'Guest';
return new Response(`Hello, ${name}!`);
});
Solution
Step 1: Extract query parameters from request URL
Use new URL(req.url) to parse the URL and access searchParams for query parameters.
Step 2: Get 'name' parameter safely and respond
Use url.searchParams.get('name') with fallback to 'Guest', then return a Response with the greeting string.
Final Answer:
Deno.serve(req => {
const url = new URL(req.url);
const name = url.searchParams.get('name') || 'Guest';
return new Response(`Hello, ${name}!`);
}); -> Option C
Quick Check:
Use URL and searchParams to read query [OK]
Hint: Parse req.url with URL to access query parameters [OK]
Common Mistakes:
Assuming req has query or params properties
Trying to get query params directly from req
Using non-existent req.get() method
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.