Настроить Express для отправки index.html для каждого URL-адреса ИСКЛЮЧИТЬ те, которые заканчиваются на .css и .js

Я новичок в Express, и я пытаюсь настроить SPA, где каждый URL обрабатывается index.html(Backbone).

Я хочу, чтобы каждый url отправил index.html, за исключением /bundle.js и/style.css, или еще лучше, любой url, который указывал бы файл (заканчивающийся на .xyz)

Я пробовал:

app.get('*', function(req, res) {
    res.sendfile(__dirname+'/public/index.html');
};

Но это отправлено bundle.js с содержимым index.html. Как это сделать?

Ответ 1

Я считаю, что для решения этой задачи могут быть два подхода, причем первое, вероятно, предпочтительнее. Если вы можете перемещать bundle.js и style.css, поместите их, а также любые другие статические файлы в каталог public и используйте следующий подход для статического обслуживания всех файлов из public:

app.use(express.static(__dirname + '/public'));

app.get('*', function(req, res){
  res.sendfile(__dirname + '/public/index.html');
});

Этот подход предпочтительнее, потому что он "будет работать", когда вы поместите новые статические файлы в каталог public. Затем вы сможете получить доступ к этим статическим файлам в http://server:port/bundle.js (или соответствующую дочернюю папку в зависимости от выбранной вами иерархии)

В качестве альтернативы вы можете оставить структуру файла как есть и использовать порядок, в котором определены маршруты, чтобы выполнить аналогичное поведение, хотя оно не так гибко и по существу статически определено:

app.get('/bundle.js', function(req, res){
  res.sendfile(__dirname + '/bundle.js');
});

app.get('/style.css', function(req, res){
  res.sendfile(__dirname + '/style.css');
});

app.get('*', function(req, res){
  res.sendfile(__dirname + '/public/index.html');
});