Currently I'm using a controller within my Express app to handle routing. When a certain route is hit I call pagesController.showPlayer
which serves my index.html
. Here is the controller:
'use strict';
var path = require('path');
var player = function(req, res) {
res.sendFile(path.join(__dirname, '../assets', 'index.html'));
};
module.exports = {
player: player
};
I need to also send back a JSON object representing the user who is requesting this route.
However, when I add res.json({user: req.user});
all I get back is this JSON object, index.html
is no longer shown.
There is no actual difference between res. send and res. json, both methods are almost identical.
The res. sendFile() function basically transfers the file at the given path and it sets the Content-Type response HTTP header field based on the filename extension.
The res. json function on the other handsets the content-type header to application/JSON so that the client treats the response string as a valid JSON object.
json() Function. The res. json() function sends a JSON response. This method sends a response (with the correct content-type) that is the parameter converted to a JSON string using the JSON.
The res.json()
represents the HTTP response that an Express app sends when it gets an HTTP request. On the other hand, res.sendFile()
transfers the file at the given path.
In both cases, the flow is essentially transferred to client who might have made the request.
So no, you cannot use res.sendFile
and res.json
together.
However, you do have few workarounds to achieve the desired goal:
res.sendFile have the following signature:
res.sendFile(path [, options] [, fn])
Where path
must be an absolute path of the file(Unless the root option is set in the options object).
In options
, you can specify the object
containing HTTP headers to serve with the file.
example:
var options = {
headers: {
'x-timestamp': Date.now(),
'x-sent': true,
'name': 'MattDionis',
'origin':'stackoverflow'
}
};
res.sendFile(path.join(__dirname, '../assets', 'index.html'), options);
Thats really the closest you can do to achieve the desired task. There are other options too..
res.json
) and manage routing at client side(while nodejs will serve as an API end), orHope it Helps!
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