Я пытаюсь настроить маршрутизацию с 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);
}
});
Помощь приветствуется.