React-express: маршруты GET не работают из href, но маршруты POST работают из представлений формы - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь настроить маршрутизацию с React, не углубляясь в React Router. У меня есть приложение клиента реакции и приложение сервера экспресс отдельно. По существу, POST-маршруты регистрации и входа в систему работают отлично, но для того, чтобы заставить их работать, они запускаются путем отправки формы, подобной этой: <form className="loginform" refs='loginform' method="POST" action="/users/login" novalidate="novalidate"> Они отлично работают. Но использование обычного href не активирует мой / выход из GET маршрута. Это не потому, что это неправильный адрес, на экспресс на стороне сервера у меня

const users = require('./routes/users');
app.use('/users/', users);

Ниже приведена проблемная ссылка href в компоненте React, который я настроил на стороне клиента.

<div className="userquickdash row">
  <div className="usernamedash">{props.username}</div>
  <div className="logout"><a href="/users/logout">logout</a>
 </div>

Ниже приведен маршрут '/ logout' на сервере, который, похоже, не работает. Вместо этого запускается основной маршрут '/', даже если он указывает на http://localhost:3000/users/logout в браузере. Когда я заменяю «/ logout» на «*», это единственный способ, которым я могу заставить этот конкретный маршрут работать.

router.get('/logout', (req, res) => {
    console.log('heylogoutrouteworks');
});

router.get('/', (req, res) => {
    console.log('mainroute');
    User.find()
        .then(User => res.json(User))
});

Это POST-маршруты, которые работают нормально при запуске из отправки формы.

router.post('/login', (req, res, next) => {
    if (req.body.email && req.body.password) {
        User.authenticate(req.body.email, req.body.password, function (error, user) {
            console.log(user);
            if (error || !user) {
                var err = new Error('Wrong email or password');
                err.status = 401;
                return next(err);
            } else {
                req.session.userId = user._id;
                req.session.username = user.username;
                return res.redirect('/');
            }
        });
    } else {
        var err = new Error('Email and password are required');
        err.status = 401;
        return next(err);
    }
});

// REGISTER
router.post('/register', (req, res, next) => {
    if (req.body.username && req.body.regemail && req.body.regpassword && req.body.confirmPassword) {

        // confirm that user typed same password twice
        if (req.body.regpassword !== req.body.confirmPassword) {
            var err = new Error('Passwords do not match');
            err.status = 400;
            err.type = 'sign in error';
            return next(err);
        } 

        // create obj with form input
        var userData = {
            email: req.body.regemail,
            username: req.body.username,
            password: req.body.regpassword,
            watching: '',

        };

        // use schema's 'create' method to insert document into Mongo
        User.create(userData, function (error, user) {
            if (error) {
                return next(error);
            } else {
                console.log(user);
                req.session.userId = user._id;
                req.session.username = user.username;
                return res.redirect('/');
            }
        });

    } else {
        var err = new Error('All fields required for account registration');
        err.status = 400;
        return next(err);
    }
});

Помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...