web-dev-qa-db-fra.com

moyen le plus simple de faire en sorte que Express serve une page par défaut?

J'utilise ceci pour que Node.js/Express soit configuré en tant que serveur Web rudimentaire. Il sert simplement un ensemble de pages statiques sans autre traitement. J'aimerais qu'il serve toujours /default.html quand un navigateur va sur le site sans nom de fichier. 

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

J'ai essayé d'utiliser res.sendfile et res.redirect, mais sans grand succès; Il est évident que je manque quelque chose car je me retrouve avec une erreur «n’a aucune méthode». 

Selon vous, quel est le moyen le plus simple d'atteindre mon objectif? 

15
StevenV

Vous pouvez faire quelque chose comme ça. En supposant que c'est un fichier html relatif au fichier .js:

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

J'ai brièvement recherché les meilleures pratiques pour servir un dossier public et spécifier la page par défaut à servir. Après avoir examiné la documentation "Intergiciel Express", ma solution se présente comme suit:

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);
});
19
Ryan Ruppert

J'ai ajouté ma propre variante avec de la "viande" supplémentaire pour montrer comment vous pouvez même inclure le routage. Je mets tout le code suivant dans un fichier nommé "routes.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' }));
};

J'appelle ensuite ce fichier dans mon fichier "configure.js" qui sera requis dans mon fichier "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;
};

Je n'ai pas vu comment gérer au mieux le routage, mais ce code semble fonctionner pour moi.

J'aimerais des commentaires!

1
Belden Schroeder