Bird
Raised Fist0
Expressframework~10 mins

Cache middleware pattern in Express - Interactive Code Practice

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

Complete the code to create a cache object in Express middleware.

Express
const cache = [1]();
Drag options to blanks, or click blank then click option'
Anew Array
Bnew Set
Cnew Object
Dnew Map
Attempts:
3 left
💡 Hint
Common Mistakes
Using new Set instead of Map, which only stores unique values without keys.
Using new Array which is not suitable for key-value caching.
2fill in blank
medium

Complete the middleware function to check if the cache has the requested URL.

Express
function cacheMiddleware(req, res, next) {
  if (cache.[1](req.url)) {
    res.send(cache.get(req.url));
  } else {
    next();
  }
}
Drag options to blanks, or click blank then click option'
Ahas
Bincludes
Ccontains
Dexists
Attempts:
3 left
💡 Hint
Common Mistakes
Using includes or contains which are not methods of Map.
Using exists which is not a JavaScript method.
3fill in blank
hard

Fix the error in the middleware to store the response body in cache after sending it.

Express
function cacheMiddleware(req, res, next) {
  if (cache.has(req.url)) {
    res.send(cache.get(req.url));
  } else {
    const originalSend = res.send;
    res.send = function(body) {
      cache.set(req.url, [1]);
      originalSend.call(this, body);
    };
    next();
  }
}
Drag options to blanks, or click blank then click option'
Ares.body
Bthis.body
Cbody
Dreq.body
Attempts:
3 left
💡 Hint
Common Mistakes
Trying to access res.body which is undefined.
Using req.body which is the request data, not response.
4fill in blank
hard

Fill both blanks to create a cache middleware that stores JSON responses.

Express
function cacheMiddleware(req, res, next) {
  if (cache.has(req.url)) {
    res.json(cache.get(req.url));
  } else {
    const originalJson = res.json;
    res.json = function([1]) {
      cache.set(req.url, [2]);
      originalJson.call(this, [1]);
    };
    next();
  }
}
Drag options to blanks, or click blank then click option'
Adata
Bres.body
Dbody
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variable names for the parameter and cache value.
Trying to use res.body which is not defined.
5fill in blank
hard

Fill all three blanks to implement cache middleware with expiration time.

Express
const cache = new Map();
const cacheExpiry = new Map();
const CACHE_DURATION = 60000; // 1 minute

function cacheMiddleware(req, res, next) {
  const now = Date.now();
  if (cache.has(req.url) && cacheExpiry.get(req.url) > [1]) {
    res.send(cache.get(req.url));
  } else {
    const originalSend = res.send;
    res.send = function([2]) {
      cache.set(req.url, [3]);
      cacheExpiry.set(req.url, Date.now() + CACHE_DURATION);
      originalSend.call(this, [2]);
    };
    next();
  }
}
Drag options to blanks, or click blank then click option'
Anow
Bbody
Ddata
Attempts:
3 left
💡 Hint
Common Mistakes
Using undefined variables for time comparison.
Mixing up parameter names for the response body.

Practice

(1/5)
1. What is the main purpose of cache middleware in an Express app?
easy
A. To handle user authentication
B. To store responses and speed up repeated requests
C. To parse incoming JSON data
D. To log all incoming requests

Solution

  1. Step 1: Understand cache middleware role

    Cache middleware stores responses temporarily to avoid repeating expensive operations.
  2. Step 2: Compare with other middleware roles

    Authentication, parsing, and logging serve different purposes unrelated to caching.
  3. Final Answer:

    To store responses and speed up repeated requests -> Option B
  4. Quick Check:

    Cache middleware = store responses [OK]
Hint: Cache middleware speeds up repeated requests by storing responses [OK]
Common Mistakes:
  • Confusing cache with authentication middleware
  • Thinking cache parses request bodies
  • Assuming cache logs requests
2. Which of the following is the correct way to define a simple cache middleware function in Express?
easy
A. function cache(req, res, next) { next(); res.send(cacheData); }
B. function cache(req, res) { res.send(cacheData); next(); }
C. function cache(req, res, next) { if (cacheData) res.send(cacheData); else next(); }
D. function cache(req, next, res) { if (cacheData) res.send(cacheData); else next(); }

Solution

  1. Step 1: Check middleware signature

    Express middleware functions take (req, res, next) in that order.
  2. Step 2: Verify control flow

    If cached data exists, send it; otherwise, call next() to continue processing.
  3. Final Answer:

    function cache(req, res, next) { if (cacheData) res.send(cacheData); else next(); } -> Option C
  4. Quick Check:

    Middleware signature and flow = function cache(req, res, next) { if (cacheData) res.send(cacheData); else next(); } [OK]
Hint: Middleware must have (req, res, next) and call next() if no cache [OK]
Common Mistakes:
  • Wrong parameter order in middleware function
  • Calling next() after sending response
  • Not calling next() when cache miss
3. Given this cache middleware snippet, what will be the output if cacheData is { message: 'Hello' }?
function cache(req, res, next) {
  if (cacheData) {
    res.json(cacheData);
  } else {
    next();
  }
}

app.get('/greet', cache, (req, res) => {
  res.json({ message: 'Hi there!' });
});
medium
A. {"message":"Hello"}
B. {"message":"Hi there!"}
C. Error: cacheData is undefined
D. No response sent

Solution

  1. Step 1: Check cacheData value

    cacheData is defined as { message: 'Hello' }, so the if condition is true.
  2. Step 2: Determine middleware behavior

    Since cacheData exists, middleware sends JSON response and does not call next().
  3. Final Answer:

    {"message":"Hello"} -> Option A
  4. Quick Check:

    cacheData present sends cached response [OK]
Hint: If cacheData exists, middleware sends it and skips next() [OK]
Common Mistakes:
  • Assuming next() runs even if cacheData exists
  • Confusing JSON string with object
  • Expecting original handler response
4. Identify the bug in this cache middleware code:
let cacheData;

function cache(req, res, next) {
  if (cacheData) {
    res.send(cacheData);
  }
  next();
}
medium
A. Middleware function missing req parameter
B. cacheData is not initialized
C. res.send should be res.json
D. next() is called even after sending a response

Solution

  1. Step 1: Analyze control flow

    If cacheData exists, res.send(cacheData) sends a response, but next() is still called afterward.
  2. Step 2: Understand Express behavior

    Calling next() after sending a response can cause errors or duplicate responses.
  3. Final Answer:

    next() is called even after sending a response -> Option D
  4. Quick Check:

    Calling next() after res.send causes errors [OK]
Hint: Do not call next() after sending a response [OK]
Common Mistakes:
  • Calling next() unconditionally after res.send
  • Ignoring middleware flow control
  • Assuming res.send and next() can run together
5. You want to implement cache middleware that stores responses for 10 seconds and then expires. Which approach correctly achieves this in Express?
hard
A. Store response in cacheData with a timestamp; clear cacheData if older than 10 seconds before sending
B. Use setTimeout to clear cacheData every 10 seconds regardless of requests
C. Send cached response only if cacheData exists, without checking time
D. Clear cacheData manually by restarting the server every 10 seconds

Solution

  1. Step 1: Understand cache expiration logic

    Cache should store data with a timestamp and check age before sending cached response.
  2. Step 2: Evaluate options

    Store response in cacheData with a timestamp; clear cacheData if older than 10 seconds before sending checks timestamp and clears stale cache before responding, ensuring fresh data.
  3. Final Answer:

    Store response in cacheData with a timestamp; clear cacheData if older than 10 seconds before sending -> Option A
  4. Quick Check:

    Cache expiration needs timestamp check [OK]
Hint: Use timestamps to expire cache, not just timers or manual clears [OK]
Common Mistakes:
  • Ignoring cache expiration timing
  • Clearing cache blindly without request context
  • Relying on server restart to clear cache
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