Bird
Raised Fist0
Expressframework~10 mins

res.download for file downloads in Express - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - res.download for file downloads
Client sends request
↓
Server receives request
↓
res.download called with file path
↓
Express sets headers for download
↓
File is streamed to client
↓
Client browser prompts to save file
↓
Download completes or errors handled
This flow shows how Express handles a file download request by setting headers and streaming the file to the client.
Execution Sample
Express
app.get('/file', (req, res) => {
  res.download('./files/report.pdf');
});
This code sends the file 'report.pdf' to the client as a download when they visit '/file'.
Execution Table
StepActionInput/ParameterResult/Effect
1Client requests '/file'GET /fileRequest received by server
2Express calls route handlerreq, resHandler function runs
3res.download called'./files/report.pdf'Sets headers for download
4Headers setContent-Disposition: attachmentBrowser knows to download
5File streamedreport.pdf contentData sent to client
6Client browser promptsDownload dialogUser chooses save location
7Download completesFile fully receivedProcess ends successfully
💡 Download completes or errors handled if file missing or interrupted
Variable Tracker
VariableStartAfter res.download callAfter streamingFinal
reqRequest objectRequest objectRequest objectRequest object
resResponse objectHeaders setStreaming fileResponse finished
filePathundefined'./files/report.pdf''./files/report.pdf''./files/report.pdf'
Key Moments - 3 Insights
Why does the browser show a download prompt instead of opening the file?
Because res.download sets the 'Content-Disposition' header to 'attachment', telling the browser to download instead of display. See execution_table step 4.
What happens if the file path is wrong or file is missing?
Express will send an error response or call the error handler. The download won't start. This is implied after step 7 in execution_table.
Does res.download block the server while sending the file?
No, Express streams the file asynchronously, so the server can handle other requests during download (step 5).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step does Express tell the browser to download the file?
AStep 3
BStep 4
CStep 5
DStep 6
💡 Hint
Check the 'Headers set' row in execution_table where Content-Disposition is applied.
According to variable_tracker, what is the state of 'res' after streaming starts?
AStreaming file
BResponse finished
CHeaders set
DRequest object
💡 Hint
Look at the 'After streaming' column for 'res' in variable_tracker.
If the file path is incorrect, what will likely happen in the execution flow?
AClient immediately downloads an empty file
BBrowser shows download prompt with wrong file name
CServer sends an error response instead of streaming
DDownload completes successfully
💡 Hint
Refer to key_moments about file missing and error handling after step 7.
Concept Snapshot
res.download(filePath) sends a file as a download to the client.
It sets 'Content-Disposition: attachment' header.
Express streams the file asynchronously.
Browser shows a save dialog.
Errors occur if file missing.
Use in route handlers to serve files.
Full Transcript
When a client requests a file download, Express receives the request and runs the route handler. Calling res.download with the file path sets headers telling the browser to download the file instead of displaying it. Express streams the file content to the client asynchronously. The browser then shows a save dialog for the user to choose where to save the file. If the file path is wrong or the file is missing, Express sends an error response instead of streaming. This process allows efficient file downloads without blocking the server.

Practice

(1/5)
1. What does res.download() do in an Express app?
easy
A. Uploads a file from the user to the server
B. Sends a file to the user for download
C. Deletes a file on the server
D. Reads a file and logs its content

Solution

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

    res.download() is used to send files to users so they can download them easily.
  2. Step 2: Compare with other file operations

    Uploading, deleting, or reading files are different operations and not what res.download() does.
  3. Final Answer:

    Sends a file to the user for download -> Option B
  4. Quick Check:

    res.download() = Sends file [OK]
Hint: Remember: download means sending file to user [OK]
Common Mistakes:
  • Confusing download with upload
  • Thinking it deletes files
  • Assuming it reads file content
2. Which is the correct syntax to send a file named report.pdf for download using res.download?
easy
A. res.download('report.pdf')
B. res.download(report.pdf)
C. res.download('report.pdf', 'download')
D. res.download('report.pdf', {filename: 'download.pdf'})

Solution

  1. Step 1: Check the basic usage of res.download

    The first argument is the file path as a string, so res.download('report.pdf') is correct.
  2. Step 2: Analyze other options

    res.download(report.pdf) misses quotes making it invalid syntax. res.download('report.pdf', 'download') adds a second argument incorrectly as a string. res.download('report.pdf', {filename: 'download.pdf'}) uses an object which is not valid for filename.
  3. Final Answer:

    res.download('report.pdf') -> Option A
  4. Quick Check:

    File path string only = res.download('report.pdf') [OK]
Hint: File path must be a string in quotes [OK]
Common Mistakes:
  • Omitting quotes around filename
  • Passing wrong argument types
  • Using object instead of string for filename
3. What will happen when this code runs?
app.get('/file', (req, res) => {
  res.download('files/data.txt', 'info.txt');
});
medium
A. The file 'files/data.txt' is sent and saved as 'info.txt' by the user
B. The file 'info.txt' is sent from the server
C. An error occurs because the second argument is invalid
D. The file 'data.txt' is sent without renaming

Solution

  1. Step 1: Understand res.download parameters

    The first argument is the path on the server, the second is the filename for the user.
  2. Step 2: Apply to given code

    The server sends 'files/data.txt' but the user will see it saved as 'info.txt'.
  3. Final Answer:

    The file 'files/data.txt' is sent and saved as 'info.txt' by the user -> Option A
  4. Quick Check:

    res.download(path, filename) renames file [OK]
Hint: Second argument renames file for user [OK]
Common Mistakes:
  • Thinking second argument is server file path
  • Assuming no renaming happens
  • Believing second argument causes error
4. Identify the error in this code snippet:
app.get('/download', (req, res) => {
  res.download();
});
medium
A. res.download requires a callback as first argument
B. res.download cannot be used inside app.get
C. No error, code works fine
D. Missing file path argument in res.download

Solution

  1. Step 1: Check res.download required arguments

    res.download() requires at least the file path as the first argument.
  2. Step 2: Analyze given code

    The code calls res.download() with no arguments, causing an error.
  3. Final Answer:

    Missing file path argument in res.download -> Option D
  4. Quick Check:

    res.download needs file path [OK]
Hint: Always provide file path to res.download [OK]
Common Mistakes:
  • Calling res.download without arguments
  • Thinking res.download needs callback first
  • Assuming no error if arguments missing
5. You want to send a file report.pdf for download but also handle errors if the file is missing. Which code correctly does this?
hard
A. res.download('report.pdf', (err) => { if (err) throw err; });
B. res.download('report.pdf').catch(() => res.status(404).send('File not found'));
C. res.download('report.pdf', err => { if (err) res.status(404).send('File not found'); });
D. res.download('report.pdf', 'report.pdf', err => { if (err) res.send('Error'); });

Solution

  1. Step 1: Understand error handling in res.download

    res.download accepts an optional callback as the last argument to handle errors.
  2. Step 2: Check each option

    res.download('report.pdf', err => { if (err) res.status(404).send('File not found'); }); uses the callback correctly to send 404 if error occurs. res.download('report.pdf').catch(() => res.status(404).send('File not found')); wrongly uses .catch which is not supported. res.download('report.pdf', 'report.pdf', err => { if (err) res.send('Error'); }); has an extra filename argument which is unnecessary here. res.download('report.pdf', (err) => { if (err) throw err; }); throws error instead of handling gracefully.
  3. Final Answer:

    res.download('report.pdf', err => { if (err) res.status(404).send('File not found'); }); -> Option C
  4. Quick Check:

    Use callback to handle errors in res.download [OK]
Hint: Use callback function to catch errors in res.download [OK]
Common Mistakes:
  • Using promises or .catch with res.download
  • Not handling errors at all
  • Passing wrong number of arguments
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