Hello there I have been trying to send a file from node.js to the client.
My code works however when the client goes to the specified url (/helloworld/hello.js/test) it streams the file. 
Accessing it from Google Chrome makes the file (.mp3) play in a player.
My goal is to have the client's browser download the file and ask the client where he wants to store it, not stream it on the website.
http.createServer(function(req, res) {
    switch (req.url) {
        case '/helloworld/hello.js/test':
            var filePath = path.join(__dirname, '/files/output.mp3');
            var stat = fileSystem.statSync(filePath);
            res.writeHead(200, {
                'Content-Type': 'audio/mpeg',
                'Content-Length': stat.size
            });
            var readStream = fileSystem.createReadStream(filePath);
            // We replaced all the event handlers with a simple call to readStream.pipe()
            readStream.on('open', function() {
                // This just pipes the read stream to the response object (which goes to the client)
                readStream.pipe(res);
            });
            readStream.on('error', function(err) {
                res.end(err);
            });
    }
});
                Methods to send response from server to client are:Using send() function. Using json() function.
Method 1: Using 'https' and 'fs' module We can use the http GET method to fetch the files that are to be downloaded. The createWriteStream() method from fs module creates a writable stream and receives the argument with the location of the file where it needs to be saved.
It gives the current working directory of the Node. js process. __dirname: It is a local variable that returns the directory name of the current module. It returns the folder path of the current JavaScript file.
You need to set some header flags;
res.writeHead(200, {
    'Content-Type': 'audio/mpeg',
    'Content-Length': stat.size,
    'Content-Disposition': 'attachment; filename=your_file_name'
});
For replacing streaming with download;
var file = fs.readFile(filePath, 'binary');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'audio/mpeg');
res.setHeader('Content-Disposition', 'attachment; filename=your_file_name');
res.write(file, 'binary');
res.end();
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With