html - serve - static files in express
¿Cuál es la mejor práctica para servir html en node.js con express.js? (2)
Podría usar el middleware static
:
app.use("/", express.static(__dirname));
Un ejemplo de servidor:
var express = require(''express'');
var app = express();
app.use(''/'', express.static(__dirname + ''/public''));
app.listen(3000, function() { console.log(''listening'')});
Esta es la estructura del archivo:
.
├── public
│ ├── a.html
│ ├── b.html
│ └── c.html
└── server.js
Documentación:
Actualmente estoy publicando todo mi html directamente en mi archivo app.js / server.js como este:
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'');
});
Me imagino que si tengo más de 15 páginas html, probablemente esta no sea la mejor manera de llamarlas. ¿Hay una mejor manera de servirlos desde otro archivo o ubicación y utilizando exportar o algo para poder llamar a una sola función o algo en app.js. Puede ser para lo que es la ruta pero quizás no la entiendo demasiado bien.
(Se agregó más código que está en el mismo archivo)
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'')));
Una idea sería utilizar un tipo de ruta de catch-all como la última ruta, como la siguiente:
app.get(''/:page'', function(req, res) {
res.sendfile(path.join(__dirname, ''public'', ''pages'', path.basename(req.params.page) + ''.html''));
});
Eso requeriría que pusiera sus archivos .html en public / pages / about.html, etc.
Es posible que desee cambiar el orden del enrutador de archivos estáticos para que los archivos estáticos también tengan prioridad sobre las rutas, a menos que desee que esa ruta capture cosas en la carpeta pública, como esta:
aplicación
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(express.static(path.join(__dirname, ''public'')));
app.use(app.router);