Search code examples
htmlnode.jsexpressstatic-files

What is the best practice for serving html in node.js with express.js?


I currently am serving all my html right in my app.js/server.js file like this:

app.get('/', function(req, res) {
    res.render('index.html');
});
app.get('/about', function(req, res) {
    res.render('about.html');
});
app.get('/projects', function(req, res) {
    res.render('projects.html');
});

I imagine if I have 15+ html pages that this is probably not the best way to call them. Is there a better way to serve them from another file or location and using export or something to be able to call just one function or something on app.js. It might be what the routing is for but maybe I do not understand it too well.

(added more code that is in the same file)

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/public');

// used below code to render html files
app.engine('html', require('ejs').renderFile);

app.set('view engine', 'ejs');
app.use(express.favicon("public/img/favicon.ico"));
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

Solution

  • You could use the static middleware:

    app.use("/", express.static(__dirname));
    

    A server example:

    var express = require('express');
    var app = express();
    app.use('/', express.static(__dirname + '/public'));
    app.listen(3000, function() { console.log('listening')});
    

    This is the file structure:

    .
    ├── public
    │   ├── a.html
    │   ├── b.html
    │   └── c.html
    └── server.js
    

    Documentation: