What if you never had to rewrite your data fetching code for every new feature?
Why Data fetching with handlers in Deno? - Purpose & Use Cases
Imagine building a web app where you manually write code to fetch data from a server every time a user clicks a button or loads a page.
You have to write separate code for each action, handle errors yourself, and update the UI manually.
This manual approach is slow and repetitive.
You might forget to handle errors or update the UI correctly, causing bugs.
It's hard to keep track of all the different fetch calls and their results.
Data fetching with handlers lets you organize your fetch logic in one place.
Handlers automatically manage requests and responses, making your code cleaner and easier to maintain.
You focus on what to do with the data, not how to fetch it every time.
fetch(url).then(res => res.json()).then(data => updateUI(data)).catch(err => showError(err))
handler.get('/data', async () => { return await fetchData(); })
This makes your app faster to build and easier to scale by separating data fetching logic from UI code.
Think of a weather app that fetches current weather data whenever you open it or refresh.
With handlers, you write the fetch logic once and reuse it everywhere.
Manual data fetching is repetitive and error-prone.
Handlers centralize and simplify data fetching logic.
This leads to cleaner, more maintainable, and scalable code.
Practice
serve in Deno for data fetching?Solution
Step 1: Understand the role of
Theserveand handlerservefunction listens for incoming HTTP requests and uses the handler function to decide how to respond.Step 2: Identify the handler's purpose
The handler processes each request and returns the correct response, such as data or status messages.Final Answer:
To process incoming requests and send back appropriate responses -> Option DQuick Check:
Handler processes requests = D [OK]
- Thinking handler creates database connections automatically
- Confusing handler with styling or compilation tasks
- Assuming serve compiles code
handler?Solution
Step 1: Recall the
In Deno,servefunction usageserveis called with the handler function as an argument to start the server.Step 2: Check syntax correctness
The correct syntax isserve(handler);which passes the handler function properly.Final Answer:
serve(handler); -> Option BQuick Check:
serve called with handler function = C [OK]
- Using assignment instead of function call
- Trying to call serve as a method on handler
- Using invalid arrow syntax
async function handler(req) {
if (req.url.endsWith('/hello')) {
return new Response('Hello World');
}
return new Response('Not Found', { status: 404 });
}What will the server respond when a request is made to
http://localhost:8000/hello?Solution
Step 1: Analyze the URL condition in handler
The handler checks if the request URL ends with '/hello'. If yes, it returns 'Hello World'.Step 2: Match the request URL
The request URL is exactly '/hello', so the condition is true and the response is 'Hello World'.Final Answer:
A response with body 'Hello World' -> Option AQuick Check:
URL ends with '/hello' returns 'Hello World' = B [OK]
- Assuming 404 because of missing else
- Thinking response body is empty
- Expecting runtime error from this code
async function handler(req) {
if (req.url === '/data') {
const data = await fetch('https://api.example.com/data');
return data.json();
}
return new Response('Not Found', { status: 404 });
}Solution
Step 1: Understand fetch and response handling
The fetch returns a Response object; callingdata.json()returns a Promise that must be awaited.Step 2: Identify missing await
The code returnsdata.json()without awaiting it, which returns a Promise instead of a Response object.Final Answer:
Missing await before data.json() -> Option CQuick Check:
Await JSON parsing Promise = A [OK]
- Thinking fetch is disallowed in handlers
- Using req.path instead of req.url
- Believing 404 status is invalid
/user. Which handler function correctly fetches the JSON data and returns it as a JSON response?Solution
Step 1: Check correct async handling and URL matching
async function handler(req) { if (req.url.endsWith('/user')) { const response = await fetch('https://api.example.com/user'); const data = await response.json(); return new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json' } }); } return new Response('Not Found', { status: 404 }); } usesendsWith('/user')to match URL and awaits both fetch and response.json(), which is correct.Step 2: Verify response formatting
async function handler(req) { if (req.url.endsWith('/user')) { const response = await fetch('https://api.example.com/user'); const data = await response.json(); return new Response(JSON.stringify(data), { headers: { 'Content-Type': 'application/json' } }); } return new Response('Not Found', { status: 404 }); } returns a new Response with JSON string and correct Content-Type header, ensuring proper JSON response.Final Answer:
Option A correctly fetches and returns JSON data with proper async handling and headers -> Option AQuick Check:
Await fetch and json, set JSON header = A [OK]
- Not awaiting response.json()
- Returning raw Promise instead of Response
- Missing Content-Type header for JSON
- Using non-async function with await
Ready to prove it?
Pass the test and this pattern moves unknown
