Bird
Raised Fist0
Svelteframework~10 mins

Middleware patterns with hooks in Svelte - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define the hook function correctly.

Svelte
export const [1] = async ({ event, resolve }) => {
  return await resolve(event);
};
Drag options to blanks, or click blank then click option'
Ahandle
BuseEffect
ConMount
DbeforeUpdate
Attempts:
3 left
💡 Hint
Common Mistakes
Using lifecycle hooks like useEffect which are React-specific.
Importing hooks that do not exist in SvelteKit.
2fill in blank
medium

Complete the code to define a middleware that logs each request method.

Svelte
export const handle = async ({ event, resolve }) => {
  console.log(event.request.[1]);
  return await resolve(event);
};
Drag options to blanks, or click blank then click option'
Aurl
Bheaders
Cmethod
Dbody
Attempts:
3 left
💡 Hint
Common Mistakes
Using url instead of method to log the HTTP verb.
Trying to access body directly without parsing.
3fill in blank
hard

Fix the error in the middleware to correctly modify the response headers.

Svelte
export const handle = async ({ event, resolve }) => {
  const response = await resolve(event);
  response.headers.set('[1]', 'no-store');
  return response;
};
Drag options to blanks, or click blank then click option'
Acache control
BCache-Control
Ccache_control
Dcachecontrol
Attempts:
3 left
💡 Hint
Common Mistakes
Using lowercase or underscored header names which are invalid.
Adding spaces in header names.
4fill in blank
hard

Fill both blanks to create middleware that blocks requests without a token header.

Svelte
export const handle = async ({ event, resolve }) => {
  const token = event.request.headers.get('[1]');
  if (!token) {
    return new Response('Unauthorized', { status: [2] });
  }
  return await resolve(event);
};
Drag options to blanks, or click blank then click option'
Aauthorization
B401
C403
Dtoken
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong header names like token.
Returning status 403 which means forbidden, not unauthorized.
5fill in blank
hard

Fill all three blanks to create middleware that adds a custom header and logs the response status.

Svelte
export const handle = async ({ event, resolve }) => {
  const response = await resolve(event);
  response.headers.set('[1]', '[2]');
  console.log('Response status:', response.[3]);
  return response;
};
Drag options to blanks, or click blank then click option'
AX-Custom-Header
BSvelteKit
Cstatus
DstatusText
Attempts:
3 left
💡 Hint
Common Mistakes
Using statusText instead of status to log the status code.
Forgetting to set the header with the correct name.

Practice

(1/5)
1. Which Svelte hook is best suited to run code right after a component appears on the page?
easy
A. onDestroy
B. onMount
C. afterUpdate
D. beforeUpdate

Solution

  1. Step 1: Understand when onMount runs

    onMount runs once right after the component is added to the page.
  2. Step 2: Compare with other hooks

    beforeUpdate and afterUpdate run on updates, onDestroy runs when component is removed.
  3. Final Answer:

    onMount -> Option B
  4. Quick Check:

    Run code after component appears = onMount [OK]
Hint: Use onMount for code after component loads [OK]
Common Mistakes:
  • Confusing onMount with beforeUpdate
  • Using onDestroy to run code on load
  • Thinking afterUpdate runs only once
2. Which is the correct syntax to import and use the onDestroy hook in a Svelte component?
easy
A. import { onDestroy } from 'svelte/hooks'; onDestroy(() => { /* cleanup */ });
B. import onDestroy from 'svelte'; onDestroy(() => { /* cleanup */ });
C. import { onDestroy } from 'svelte'; onDestroy = () => { /* cleanup */ };
D. import { onDestroy } from 'svelte'; onDestroy(() => { /* cleanup */ });

Solution

  1. Step 1: Check correct import syntax

    Svelte exports hooks like onDestroy as named exports from 'svelte'.
  2. Step 2: Verify usage

    The hook is called as a function with a callback: onDestroy(() => { ... }).
  3. Final Answer:

    import { onDestroy } from 'svelte'; onDestroy(() => { /* cleanup */ }); -> Option D
  4. Quick Check:

    Named import + callback function = import { onDestroy } from 'svelte'; onDestroy(() => { /* cleanup */ }); [OK]
Hint: Use named import from 'svelte' and call with callback [OK]
Common Mistakes:
  • Using default import instead of named import
  • Importing from wrong path like 'svelte/hooks'
  • Assigning hook to a variable instead of calling it
3. Given this Svelte code snippet, what will be logged to the console when the component updates?
import { beforeUpdate, afterUpdate } from 'svelte';

beforeUpdate(() => console.log('Before update'));
afterUpdate(() => console.log('After update'));

let count = 0;

function increment() {
  count += 1;
}
medium
A. After update only once after first render
B. Only Before update once when component mounts
C. Before update\nAfter update each time increment() is called
D. No logs because hooks are not called

Solution

  1. Step 1: Understand when hooks run

    beforeUpdate runs before every DOM update, afterUpdate runs after every DOM update.
  2. Step 2: Analyze increment effect

    Calling increment() changes count, triggering component update and both hooks logging messages.
  3. Final Answer:

    Before update\nAfter update each time increment() is called -> Option C
  4. Quick Check:

    Hooks run on every update = Before update\nAfter update each time increment() is called [OK]
Hint: Hooks run before and after every update triggered by state change [OK]
Common Mistakes:
  • Thinking hooks run only once on mount
  • Assuming logs happen without calling increment()
  • Confusing beforeUpdate and afterUpdate timing
4. What is wrong with this Svelte code using onDestroy?
import { onDestroy } from 'svelte';

onDestroy = () => {
  console.log('Cleanup');
};
medium
A. Assigning a function to onDestroy instead of calling it
B. Missing import statement for onDestroy
C. Using arrow function instead of regular function
D. onDestroy should be used inside onMount

Solution

  1. Step 1: Check how onDestroy is used

    The code assigns a function to onDestroy instead of calling it with a callback.
  2. Step 2: Correct usage

    onDestroy must be called like onDestroy(() => { ... }) to register cleanup.
  3. Final Answer:

    Assigning a function to onDestroy instead of calling it -> Option A
  4. Quick Check:

    Use onDestroy(callback), not assignment [OK]
Hint: Call onDestroy with a callback, don't assign it [OK]
Common Mistakes:
  • Assigning instead of calling the hook
  • Thinking arrow functions are disallowed
  • Believing onDestroy must be inside onMount
5. You want to log a message every time a Svelte component updates but only after the DOM has changed. Which hook should you use and why? Also, how would you ensure cleanup if needed?
hard
A. Use afterUpdate to log after DOM changes; use onDestroy for cleanup
B. Use beforeUpdate to log after DOM changes; no cleanup needed
C. Use onMount to log after DOM changes; cleanup inside afterUpdate
D. Use onDestroy to log after DOM changes; cleanup inside beforeUpdate

Solution

  1. Step 1: Identify hook for after DOM update

    afterUpdate runs after the DOM updates, perfect for logging post-change.
  2. Step 2: Determine cleanup hook

    onDestroy runs when component is removed, ideal for cleanup tasks.
  3. Final Answer:

    Use afterUpdate to log after DOM changes; use onDestroy for cleanup -> Option A
  4. Quick Check:

    Log after DOM update = afterUpdate; cleanup = onDestroy [OK]
Hint: Log in afterUpdate; cleanup in onDestroy [OK]
Common Mistakes:
  • Using beforeUpdate to log after DOM changes
  • Trying to cleanup inside afterUpdate
  • Confusing onMount with update hooks
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard