Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.11.2018, 14:18
Новичок на форуме
Отправить личное сообщение для MaratYahooch Посмотреть профиль Найти все сообщения от MaratYahooch
 
Регистрация: 13.11.2018
Сообщений: 4

Подружить react-router с expressjs
Сервер:
app.use("/", express.static(path.join(__dirname, "../client/build")));
app.use("/admin", express.static(path.join(__dirname, "../admin/build")));

app.get('*', (req,res) =>{
    res.sendFile(path.join("index.html"));
});

app.get('/admin/*', (req,res) =>{
    res.sendFile(path.join("index.html"));
});


Клиент:
<Router>
       <div className="page">
         <Switch>
           <Route exact path="/" component={Home} />
           <Route exact path="/events" component={Events} />
         </Switch>
       </div>
</Router>


При запросе страницы example/ мой сервер возвращает мне index.html клиента и рендерится компонент Home, но при запросе example/events мой сервер пытается найти подобный роут у себя и соответственно не дает шанса react'у использовать react-router для рендера компонента Events. Как быть?
Проблема очевидная, но не могу найти решения.
Ответить с цитированием
  #2 (permalink)  
Старый 13.11.2018, 14:38
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

на первый взгляд надо поменять местами
app.get('*...
и
app.get('/admin...
Ответить с цитированием
  #3 (permalink)  
Старый 13.11.2018, 14:42
Новичок на форуме
Отправить личное сообщение для MaratYahooch Посмотреть профиль Найти все сообщения от MaratYahooch
 
Регистрация: 13.11.2018
Сообщений: 4

Что это даст?
Ответить с цитированием
  #4 (permalink)  
Старый 13.11.2018, 15:09
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

это даст возможность обращаться к /admin, а так они будут выполнятся в том порядке в каком их зарегистрировали..., т.е. в админ никогда нельзя будет попасть, это раз

далее, непонятно, зачем запрашивать example/events если у тебя в роуте написано /events ), тогда и ссылка должна быть http://localhost:3000/events

или часть example должна быть динамической...
Ответить с цитированием
  #5 (permalink)  
Старый 13.11.2018, 15:14
Новичок на форуме
Отправить личное сообщение для MaratYahooch Посмотреть профиль Найти все сообщения от MaratYahooch
 
Регистрация: 13.11.2018
Сообщений: 4

к /admin я обращаюсь без проблем. Роут example/events у меня в react-router(посмотри код клиента). Такое разбитие мне нужно для того, чтобы разделить пользовательскую и админскую часть на два реакт-приложения.
Ответить с цитированием
  #6 (permalink)  
Старый 13.11.2018, 15:14
Новичок на форуме
Отправить личное сообщение для MaratYahooch Посмотреть профиль Найти все сообщения от MaratYahooch
 
Регистрация: 13.11.2018
Сообщений: 4

Сообщение от MaratYahooch Посмотреть сообщение
к /admin я обращаюсь без проблем. Роут example/events у меня в react-router(посмотри код клиента). Такое разбитие мне нужно для того, чтобы разделить пользовательскую и админскую часть на два реакт-приложения.
то есть я делаю по сути два SPA приложения
Ответить с цитированием
  #7 (permalink)  
Старый 13.11.2018, 15:23
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Сообщение от MaratYahooch Посмотреть сообщение
то есть я делаю по сути два SPA приложения
чем отличаются эти строки?
path.join(__dirname, "../admin/build")
path.join("index.html")

тогда для админа должен быть свой index.html где он подключает admin.bundle.js, тогда как client подключает client.bundle.js, например.

app.use("/", express.static(path.join(__dirname, "../client/build")));
app.use("/admin", express.static(path.join(__dirname, "../admin/build")));

app.get('*', (req,res) =>{
    res.sendFile(path.join(__dirname, "client", "index.html"));
});

app.get('/admin/*', (req,res) =>{
    res.sendFile(path.join(__dirname, "admin", "index.html"));
});


) по моему вопрос сначала был не про это....
Ответить с цитированием
  #8 (permalink)  
Старый 13.11.2018, 15:33
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

и насчет очередности ты меня обманул:

const express = require('express')
const app = express();

app.get('*', function (req, res) {
  res.send('any')
})

app.get('/admin/*', function (req, res) {
  res.send('admin')
})

app.listen(3000, function () {
  console.log('at 3000')
})
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
React Router - re-render компонента при смене url smegol Библиотеки/Тулкиты/Фреймворки 9 29.09.2018 23:58
node.js + react не принимает пост запрос korih Node.JS 0 15.04.2018 17:52
В поисках фронтендера React Js Москва jobcallt Работа 0 21.07.2017 10:56
Ищу Senior Frontend (React, Angular), Москва, 140 - 180 000 gross, full time офис. Ekaterina Polyakova Работа 0 11.08.2016 19:07
Нужен фронтенд разработчик со знанием React JS удаленно на проект sergeda Работа 0 13.11.2015 18:40