Как обслуживать статический html-файл непосредственно с сервера в React+Express?

Я скачал красивую html-страницу со ссылками на необходимые css и js из конструктора веб-сайтов и хочу использовать ее в качестве целевой страницы. У меня есть полноценное приложение React, и я хочу использовать этот загруженный html-файл в качестве целевой страницы для маршрута /. Как лучше всего это сделать?

Я изучил <div dangerouslySetInnerHTML>, как в приведенном ниже примере, но это приводит к медленной загрузке страницы.


export default class StaticContainer extends Component {
  state = {
    __html: "" // copy/paste html here
  }


  render() {
    return (
        <div dangerouslySetInnerHTML = {this.state} />
    );
  }
}```

почему бы вам не конвертировать загруженный html как отдельный компонент? Или это динамический контент, который меняется?

Rikin 24.05.2019 23:09

Чем это отличается от примера, который я вставил выше?

ask 25.05.2019 00:32

Делая это, вы не полагаетесь на dangerouslySetInnerHTML, и люди из React назвали его не зря, может быть, они делают кучу вещей под капотом со значением, которое вы предоставляете, что, вероятно, приводит к медлительности. Вы пытались создать новый компонент и проверить результат?

Rikin 25.05.2019 02:14

Нашел обходной путь и опубликовал решение, используя http-middleware-proxy

ask 28.05.2019 03:49
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
4
1 533
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решил это путем проксирования определенных путей непосредственно на сервер с помощью http-proxy-middleware. Дополнительную информацию см. в разделе Настройка прокси вручную документации React.

Установить http-proxy-middleware. Создайте файл src/setupProxy.js в клиентском приложении React следующим образом:

const proxy = require('http-proxy-middleware');

// Matches landing page at / alone
var landingPageFilter = function (pathname, req) {
    console.info(pathname);
    return pathname.match('^/$') && req.method === 'GET';
};

module.exports = function (app) {
    // this is for APIs
    app.use(proxy('/api', { target: 'http://localhost:3001/' }));
    // this is for the landing page
    app.use(proxy(landingPageFilter, { target: 'http://localhost:3001/' }));
};

В моем случае я использовал Express для своего сервера, созданного с использованием express-generator. Обработал эти маршруты в app.js, как показано ниже:

app.use('/api/', indexRouter);

app.use("/", (req, res) => {
  res.status(200).sendFile(path.resolve(__dirname, "../public", "landing_page.html"));
});

где landing_page.html — загруженная страница, которую мы хотели обслуживать без React

Обновлено: это работало только в dev. Для производства вам нужно будет создать страницы React и обслуживать их. Следуйте этот учебник, но убедитесь, что у вас правильный путь для создания страниц React. В учебнике это client/build. Может отличаться в зависимости от вашей структуры каталогов.

Другие вопросы по теме