path must be absolute or specify root to res.sendFile error in index.html

1,351 views
Skip to first unread message

Christian Nwamba

unread,
Nov 28, 2014, 6:28:27 PM11/28/14
to nod...@googlegroups.com
Hi i am trying to include angular to my index.html but i get the error: path must be absolute or specify root to res.sendFile.

index.html
<!DOCTYPE html>
<html ng-app="MainApp">
<head>
<title></title>

<script type="text/javascript" src="./libs/angular/angular.js"></script>
<script type="text/javascript" src="core.js"></script>
</head>
<body ng-controller="ProdServCtrl">

</body>
</html>

server.js
    // set up ======================================================================
    var express  = require('express');
    var app      = express();                               // create our app w/ express
    var mongoose = require('mongoose');                     // mongoose for mongodb
    var port     = process.env.PORT || 8080;                // set the port
    var database = require('./config/database');            // load the database config
        var morgan = require('morgan');             // log requests to the console (express4)
    var bodyParser = require('body-parser');    // pull information from HTML POST (express4)
    var methodOverride = require('method-override'); // simulate DELETE and PUT (express4)

    // configuration ===============================================================
    mongoose.connect(database.url);     // connect to mongoDB database on modulus.io

    app.use(express.static(__dirname + '/public'));                 // set the static files location /public/img will be /img for users
    app.use(morgan('dev'));                                         // log every request to the console
    app.use(bodyParser.urlencoded({'extended':'true'}));            // parse application/x-www-form-urlencoded
    app.use(bodyParser.json());                                     // parse application/json
    app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
    app.use(methodOverride());

    // routes ======================================================================
    require('./app/routes.js')(app);

    //api route
    app.get('*', function(req, res){
    res.sendFile('./public/index.html')
    })

    // listen (start app with node server.js) ======================================
    app.listen(port, function(){
    console.log("App listening on port " + port);
    });
    
Please help.
Thanks

Danilo Sampaio

unread,
Nov 29, 2014, 11:56:06 AM11/29/14
to nod...@googlegroups.com
The lib directory should inside public directory, and remove the '.' at the beginning.

--
Job board: http://jobs.nodejs.org/
New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups "nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+un...@googlegroups.com.
To post to this group, send email to nod...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/46c05253-1e93-430b-b5b3-a16dc013840a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Ryan Schmidt

unread,
Nov 29, 2014, 11:56:57 AM11/29/14
to nod...@googlegroups.com

On Nov 28, 2014, at 5:28 PM, Christian Nwamba wrote:

> Hi i am trying to include angular to my index.html but i get the error: path must be absolute or specify root to res.sendFile.

This is an express-specific question. You may get better advice about express questions on the express-js google group instead of on this general nodejs google group.

> app.get('*', function(req, res){
> res.sendFile('./public/index.html')
> })

This is the res.sendFile it's talking about. As it says in the error message, and in the express documentation...

http://expressjs.com/api.html#res.sendFile

"Unless the root option is set in the options object, path must be an absolute path of the file."

So either make it absolute:

res.sendFile(path.join(__dirname, 'public', index.html'))

Or use the options object to specify the root:

res.sendFile('index.html', {root: path.join(__dirname, 'public')})

Reply all
Reply to author
Forward
0 new messages