Подтвердить что ты не робот

Какова наилучшая практика для обслуживания 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')));
4b9b3361

Ответ 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);