Bird
Raised Fist0
Expressframework~10 mins

res.set for response headers in Express - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - res.set for response headers
Request received
↓
Call res.set(key, value)
↓
Set header in response object
↓
Send response with headers
↓
Client receives headers + body
When a request comes in, calling res.set adds headers to the response before sending it to the client.
Execution Sample
Express
app.get('/hello', (req, res) => {
  res.set('Content-Type', 'text/plain');
  res.set('X-Custom-Header', '12345');
  res.send('Hello World');
});
This code sets two headers on the response and then sends a plain text message.
Execution Table
StepActionHeader KeyHeader ValueResponse Headers State
1Call res.setContent-Typetext/plain{"Content-Type":"text/plain"}
2Call res.setX-Custom-Header12345{"Content-Type":"text/plain","X-Custom-Header":"12345"}
3Call res.sendN/AN/AHeaders sent with body 'Hello World'
💡 Response sent to client with headers and body, ending request cycle.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3
responseHeaders{}{"Content-Type":"text/plain"}{"Content-Type":"text/plain","X-Custom-Header":"12345"}Sent to client
Key Moments - 2 Insights
Why do headers appear only after calling res.send?
Headers set by res.set are stored internally and sent only when res.send is called, as shown in step 3 of the execution_table.
Can I call res.set multiple times for different headers?
Yes, each call adds or updates headers in the responseHeaders object, as seen in steps 1 and 2.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the responseHeaders state after step 2?
A{"Content-Type":"text/plain","X-Custom-Header":"12345"}
B{"Content-Type":"text/html"}
C{}
DHeaders sent with body
💡 Hint
Check the Response Headers State column at step 2 in the execution_table.
At which step are the headers actually sent to the client?
AStep 1
BStep 3
CStep 2
DHeaders are never sent
💡 Hint
Look at the Action column and Response Headers State at step 3.
If you call res.set('Content-Type', 'application/json') after step 2 but before step 3, what changes?
AHeaders are sent immediately
BX-Custom-Header is removed
CContent-Type header changes to 'application/json'
DNo change until res.send is called
💡 Hint
res.set updates headers before sending; check variable_tracker for header updates.
Concept Snapshot
res.set(key, value) sets a response header.
Multiple calls add or update headers.
Headers are sent only when res.send or res.end is called.
Use res.set before sending response.
Headers control metadata like content type or custom info.
Full Transcript
When an Express server receives a request, you can use res.set to add headers to the response. Each call to res.set adds or updates a header key and value inside the response object. These headers are stored internally and are not sent immediately. Only when you call res.send or res.end does Express send the headers along with the response body to the client. For example, setting 'Content-Type' to 'text/plain' and a custom header 'X-Custom-Header' to '12345' will prepare these headers. When res.send('Hello World') is called, the headers and body are sent together. This process ensures headers are complete before sending. You can call res.set multiple times to add many headers. Changing a header key updates its value before sending. Understanding this flow helps you control response metadata effectively.

Practice

(1/5)
1. What does res.set do in an Express response?
easy
A. It sets or updates HTTP headers before sending the response.
B. It sends the response body to the client.
C. It closes the server connection immediately.
D. It logs request details to the console.

Solution

  1. Step 1: Understand the purpose of res.set

    res.set is used to add or modify HTTP headers in the response before sending it.
  2. Step 2: Differentiate from other response methods

    Sending the body is done by res.send, not res.set. Logging or closing connections are unrelated.
  3. Final Answer:

    It sets or updates HTTP headers before sending the response. -> Option A
  4. Quick Check:

    res.set sets headers [OK]
Hint: Remember: res.set changes headers, not body or connection [OK]
Common Mistakes:
  • Confusing res.set with res.send
  • Thinking res.set sends the response
  • Assuming res.set closes the connection
2. Which of the following is the correct syntax to set a single header using res.set?
easy
A. res.set('Content-Type', application/json);
B. res.set('Content-Type', 'application/json');
C. res.set({Content-Type: 'application/json'});
D. res.set('Content-Type' => 'application/json');

Solution

  1. Step 1: Recall correct method signature

    The correct syntax for setting one header is res.set(name, value) where both are strings.
  2. Step 2: Check each option

    res.set('Content-Type', 'application/json'); uses correct syntax with two string arguments. res.set('Content-Type' => 'application/json'); uses invalid arrow syntax. res.set({Content-Type: 'application/json'}); uses invalid object syntax - unquoted key Content-Type (hyphen requires quotes). res.set('Content-Type', application/json); misses quotes around value.
  3. Final Answer:

    res.set('Content-Type', 'application/json'); -> Option B
  4. Quick Check:

    Two string args for single header [OK]
Hint: Use two strings for single header: name and value [OK]
Common Mistakes:
  • Using arrow => instead of comma
  • Passing unquoted values
  • Confusing object syntax for single header
3. What will be the value of the Content-Type header after this code runs?
res.set({
  'Content-Type': 'text/html',
  'Cache-Control': 'no-cache'
});
res.set('Content-Type', 'application/json');
medium
A. Undefined (header not set)
B. 'text/html'
C. 'no-cache'
D. 'application/json'

Solution

  1. Step 1: Understand header setting order

    First, Content-Type is set to 'text/html' via object. Then it is overwritten by res.set('Content-Type', 'application/json').
  2. Step 2: Determine final header value

    The last set value for Content-Type is 'application/json', so that is the final header value.
  3. Final Answer:

    'application/json' -> Option D
  4. Quick Check:

    Last header set wins [OK]
Hint: Later res.set calls overwrite previous headers [OK]
Common Mistakes:
  • Assuming first set value stays
  • Confusing other headers with Content-Type
  • Thinking headers merge values
4. Identify the error in this Express code snippet:
app.get('/data', (req, res) => {
  res.send('Hello');
  res.set('X-Custom-Header', '123');
});
medium
A. Headers must be set before sending the response body.
B. res.set cannot set custom headers.
C. res.send should be called twice to set headers.
D. No error; code works fine.

Solution

  1. Step 1: Check order of res.set and res.send

    Headers must be set before calling res.send because sending the body finalizes the response.
  2. Step 2: Identify the mistake

    Here, res.send is called first, then res.set, which is too late to add headers.
  3. Final Answer:

    Headers must be set before sending the response body. -> Option A
  4. Quick Check:

    Set headers before send [OK]
Hint: Always set headers before sending response body [OK]
Common Mistakes:
  • Setting headers after res.send
  • Thinking res.set can't set custom headers
  • Calling res.send multiple times
5. You want to set multiple headers including Content-Type and Cache-Control in one call, but only if a condition is true. Which code correctly uses res.set with condition?
hard
A. res.set({'Content-Type': isJson ? 'application/json' : 'text/html'}); res.set('Cache-Control', 'no-store');
B. res.set('Content-Type', isJson ? 'application/json' : 'text/html', 'Cache-Control', 'no-store');
C. if (isJson) res.set({'Content-Type': 'application/json', 'Cache-Control': 'no-store'});
D. res.set('Content-Type', 'application/json' && 'Cache-Control', 'no-store');

Solution

  1. Step 1: Understand how to set multiple headers conditionally

    Using an object with res.set allows setting many headers at once. Wrapping in an if statement applies condition.
  2. Step 2: Evaluate each option

    if (isJson) res.set({'Content-Type': 'application/json', 'Cache-Control': 'no-store'}); correctly uses an if condition and sets multiple headers in one object. res.set('Content-Type', isJson ? 'application/json' : 'text/html', 'Cache-Control', 'no-store'); has invalid syntax with multiple pairs in one call. res.set({'Content-Type': isJson ? 'application/json' : 'text/html'}); res.set('Cache-Control', 'no-store'); splits headers into two calls but is valid; however, question asks for one call. res.set('Content-Type', 'application/json' && 'Cache-Control', 'no-store'); uses invalid logical operator in arguments.
  3. Final Answer:

    if (isJson) res.set({'Content-Type': 'application/json', 'Cache-Control': 'no-store'}); -> Option C
  4. Quick Check:

    if + res.set(object) for conditional multiple [OK]
Hint: Use object syntax inside if to set multiple headers [OK]
Common Mistakes:
  • Passing multiple header pairs as separate arguments
  • Using logical operators inside res.set arguments
  • Setting headers outside condition
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