2014년 11월 30일 일요일

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

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.



The lib directory should inside public directory, and remove the '.' at the beginning.



> 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')})

댓글 없음:

댓글 쓰기