ReactJS защищенные маршруты и вложенные маршруты - PullRequest
0 голосов
/ 22 марта 2019

У меня проблема с маршрутами в ReactJS.Я определил некоторые маршруты следующим образом:

...Import / Class...
class App extends Component {
    render() {
        return (
            <div>
                <Header />
                <Switch>
                    <Route exact path="/" component={Home} />
                    <Route path="/login" component={Login} />
                    <Route path="/signup" component={Signup} />
                    <ProtectedRoute path="/user/contact" component={Contact} />
                    <ProtectedRoute path="/user/person" component={UserPerson} />
                    <ProtectedRoute path="/user/profile" component={Profile} />
                    <Route component={NotFound} />
                </Switch>
                <Footer />
            </div>
        );
    }
}
...Export...

Ниже вы можете увидеть мой ProtectedRoute класс

...Import / Class...
const ProtectedRoute = ({ component: Component, ...rest }) => (
    <Route {...rest} render={props => (
        AuthGestion.userIsAuthenticated() ? (
            <Component {...props} />
        ) : (
            <Redirect to={{
                pathname: '/login',
                state: { from: props.location }
            }}/>
        )
    )} />
);
...Export...

Когда я захожу на мою страницу с <NavLink to="/user/person"></NavLink>, проблем нет, мой компонент загружен, и я вижу свою страницу.Но когда я сразу перехожу на URL /user/person и перезагружаю свою страницу (CTRL + F5), я получаю в Console ошибку SyntaxError: expected expression, got '<' и белую страницу.Не работают только пользовательские маршруты.

Я добавляю ниже информацию о моем сервере:

import path from 'path';
import bodyParser from 'body-parser';
import express from 'express';
import mongoose from 'mongoose';
import routes from './routes/index.route';
import config from '../../config/config';

import webpack from 'webpack';
import webpackConfig from '../../config/webpack.config.dev';
import webpackDevMiddleware from 'webpack-dev-middleware';
import webpackHotMiddleware from 'webpack-hot-middleware';

//Connexion MongoDB
mongoose.connect(config.mongodbUri, { useNewUrlParser: true });
mongoose.connection.on('connected', () => { console.log('MongoDB connecté'); });
mongoose.connection.on('error', (error) => { console.log(error); });

//Lancement serveur express
const server = express();

//Express need
server.use(bodyParser.json());
server.use(express.static(config.publicPath));
server.use(express.static(config.distPath));

//Hot reload
if(config.isDevMode) {
    const webpackCompiler = webpack(webpackConfig);
    server.use(webpackDevMiddleware(webpackCompiler, {}));
    server.use(webpackHotMiddleware(webpackCompiler));
}

// Route vers l'API
server.use('/api', routes);

// Landing page
server.get('/*', (req, res) => {
    res.sendFile(path.join(config.publicPath, '/index.html'));
});

//Ecoute du serveur
server.listen(config.port, () => {
    console.log(`App here : http://${config.host}:${config.port}`);
});

export default server;

Не могли бы вы помочь мне разобраться в проблеме?И, возможно, исправьте мою маршрутизацию, если это не хорошо.

1 Ответ

0 голосов
/ 22 марта 2019

для дальнейшего использования: https://stackoverflow.com/a/37949474/11129751

У меня есть страница реакции / реагирования-маршрутизатора без какого-либо экспресса, и я получил ту же ошибку: SyntaxError: ожидаемое выражение, получено '<', которое началосьпоявиться, как только я настрою маршрут реакции, отличный от root /.</p>

После некоторых экспериментов я выяснил, что в моем index.html была ссылка на файл js:

Итак, решение было добавить / в исходный путь:

и ошибка исчезла.

Надеюсь, что это может немного помочь.

...