Подружить 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. Как быть? Проблема очевидная, но не могу найти решения. |
на первый взгляд надо поменять местами
app.get('*... и app.get('/admin... |
Что это даст?
|
это даст возможность обращаться к /admin, а так они будут выполнятся в том порядке в каком их зарегистрировали..., т.е. в админ никогда нельзя будет попасть, это раз
далее, непонятно, зачем запрашивать example/events если у тебя в роуте написано /events ), тогда и ссылка должна быть http://localhost:3000/events или часть example должна быть динамической... |
к /admin я обращаюсь без проблем. Роут example/events у меня в react-router(посмотри код клиента). Такое разбитие мне нужно для того, чтобы разделить пользовательскую и админскую часть на два реакт-приложения.
|
Цитата:
|
Цитата:
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"));
});
) по моему вопрос сначала был не про это.... |
и насчет очередности ты меня обманул:
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')
})
|
| Часовой пояс GMT +3, время: 12:45. |