Какова наилучшая практика для обслуживания html в node.js с помощью express.js?
В настоящее время я обслуживаю весь свой html прямо в файле app.js/server.js следующим образом:
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');
});
Я предполагаю, что если у меня есть 15 + html-страниц, это, вероятно, не лучший способ назвать их. Есть ли лучший способ обслуживать их из другого файла или местоположения и использовать экспорт или что-то, что можно вызвать только одну функцию или что-то на app.js. Возможно, это будет маршрутизация, но, может быть, я не слишком хорошо ее понимаю.
(добавлено больше кода, находящегося в том же файле)
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')));
Ответы
Ответ 1
Вы можете использовать промежуточное ПО static
:
app.use("/", express.static(__dirname));
Пример сервера:
var express = require('express');
var app = express();
app.use('/', express.static(__dirname + '/public'));
app.listen(3000, function() { console.log('listening')});
Это файловая структура:
.
├── public
│ ├── a.html
│ ├── b.html
│ └── c.html
└── server.js
Документация:
Ответ 2
Одна из идей заключалась бы в использовании маршрута catch-all типа в качестве последнего маршрута, например:
app.get('/:page', function(req, res) {
res.sendfile(path.join(__dirname, 'public', 'pages', path.basename(req.params.page) + '.html'));
});
Это потребует, чтобы вы помещали ваши .html файлы в public/pages/about.html и т.д.
Возможно, вам захочется переключить порядок статического файлового маршрутизатора, чтобы статические файлы также имели приоритет над маршрутами, если вы не хотите, чтобы этот маршрут ловил вещи в общей папке, например:
Приложение
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);