NOTE : This is NOT a duplicate question, I've already tried other answers to similar questions.
I'm trying to render html files (Angular) but I'm having an issue. This works.
app.get('/randomlink', function(req, res) {
res.sendFile( __dirname + "/views/" + "test2.html" );
});
But I don't want to copy and paste dirname thingy over and over, so I tried this in order to not to be repetitive with urls:
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'views')));
app.get('/randomlink', function(req, res) {
res.sendFile('test2.html'); // test2.html exists in the views folder
});
Here's the error.
My express version is 4.13
path must be absolute or specify root to res.sendFile
If you look into the express code for sendFile, then it checks for this condition:
if (!opts.root && !isAbsolute(path)) {
throw new TypeError('path must be absolute or specify root to res.sendFile');
}
So You must need to pass Absolute path or relative path with providing root
key.
res.sendFile('test2.html', { root: '/home/xyz/code/'});
And if you want to use relative path and then you can make use path.resolve
to make it absolute path.
var path = require('path');
res.sendFile(path.resolve('test2.html'));
You can't go against official documentation of res.sendFile()
Unless the root option is set in the options object, path must be an absolute path to the file.
But I understand that you don't want to copy smth like __dirname
every time, and so for your purpose I think you can define your own middleware:
function sendViewMiddleware(req, res, next) {
res.sendView = function(view) {
return res.sendFile(__dirname + "/views/" + view);
}
next();
}
After that you can easily use this middleware like this
app.use(sendViewMiddleware);
app.get('/randomlink', function(req, res) {
res.sendView('test2.html');
});
Easiest way is to specify the root:
res.sendFile('index.html', { root: __dirname });
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