В качестве фронтэнда имеется html-страница с исполняемым скриптом bundle.js, в качестве бэкэнда - обычный express-сервер с RESTful API. Страница реагирует на действия пользователя, отправляя запросы на сервер по маршрутам, определенным в API.
Насколько мне удалось понять, надо заставить сервер выдавать эту самую html-страницу в ответ на все маршруты, кроме тех, которые прописаны в API. Вопрос - как это сделать?
Вариант прочитать и отдать как обычный файл не подходит, потому что на странице есть скрипт, вариант express.static тоже не подошел, потому что маршруты. Подскажите, пожалуйста, работающий способ, или быть может, альтернативный вариант, как подружить фронтэнд с бэкендом?
Можно сделать так, вынести все запросы к API
в отдельный роутер и подключить как миделвер. Всю статику в отдельную папку через express.static('public')
. На все остальные запросы возвращать index.html
const path = require('path');
const express = require('express');
const api = require('./routes/api'); // импортируем роутер
const indexHTML = path.resolve(__dirname,'./public/index.html');
const app = express();
// все статические файлы в папку public
app.use('/', express.static('public'));
// запросы к api выносите в отдельный файл и подключаете как миделвер
app.use('/api', api);
// на все остальные запросы
app.get('/*', (req, res) => res.sendFile(indexHTML));
app.listen(3000);
const express = require('express');
// создаете роутер
const router = express.Router();
// GET http://localhost:3000/api/some
router.get('/some',(req, res) => {
// ....
});
// POST http://localhost:3000/api/some
router.post('/some', (req, res) => {
// ...
});
// экспортируете
module.exports = router;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Начала изучать vue пару дней назадРазобралась с тем, как отрисовывать компоненты, но так и не поняла, как добавлять по событию элемент в dom
При работе с сложными вложенными объектами есть необходимость обойти нижний уровень:
Разбираюсь потихоньку в javascriptЕсть класс Weather в нем несколько свойств объявлено, вроде этого