¿La forma más sencilla de que Express sirva una página predeterminada?

Estoy usando esto para tener la configuración de Node.js / Express como un servidor web rudimentario, solo sirve un conjunto de páginas estáticas sin ningún otro procesamiento. Me gustaría que siempre sirva /default.html cuando un navegador recupera el sitio sin ningún nombre de archivo.

var express = require("express"); var app = express(); var port = process.env.PORT || 5000; app.configure(function(){ app.use(express.bodyParser()); }); app.use(express.logger()); app.use(express.static(__dirname )); app.listen(port, function() { console.log("Listening on " + port); }); 

He intentado usar res.sendfile y res.redirect, pero sin mucho éxito; Obviamente me estoy perdiendo algo, ya que termino con un error ‘no tiene método’.

¿Cuál dirías que es la forma más sencilla de lograr mi objective?

Podrías hacer algo como esto. Suponiendo que sea un archivo html que sea relativo al archivo .js:

 app.get('/', function(req, res){ res.sendfile('default.html', { root: __dirname + "/relative_path_of_file" } ); }); 

Busqué brevemente las mejores prácticas para servir una carpeta pública y especificar la página predeterminada para servir. Después de revisar la documentación de ‘Express middleware’, mi solución se parece a la siguiente,

 var express = require('express'); var app = express(); var options = { index: "coming-soon.html" }; app.use('/', express.static('app', options)); var server = app.listen(8081, function () { var host = server.address().address; var port = server.address().port; console.log('my app is listening at http://%s:%s', host, port); }); 

He agregado mi propia variación con un poco de “carne” para demostrar cómo puedes incluir el enrutamiento. Pongo todo el siguiente código en un archivo llamado “route.js”:

 var express = require('express'), painting = require('./controllers').Painting, gallery = require('./controllers').Gallery; module.exports.initialize = function(appSvr, router) { router.get('/paintings', painting.list); router.get('/galleries', gallery.list); appSvr.use('/', router); appSvr.use('/', express.static(__dirname + '/../public', { index: 'index.html' })); }; 

Luego llamo a este archivo en mi archivo “configure.js” que será requerido en mi archivo “server.js”:

 var routes = require('./routes'), express = require('express'), bodyParser = require('body-parser'); module.exports = function(appSvr) { appSvr.use(bodyParser.urlencoded()); appSvr.use(bodyParser.json()); routes.initialize(appSvr, new express.Router()); return appSvr; }; 

No he visto la mejor manera de manejar el enrutamiento, pero este código parece funcionar para mí.

Me encantaría algún comentario!