#node.js #reactjs #express #fetch
#node.js #reactjs #экспресс #извлечение
Вопрос:
Я создаю очень простой логин с помощью React и Node как часть школьного задания, аутентификация не требуется. Это мой код:
Server.js
app.post('/auth', function (request, response) {
var username = request.body.username;
var password = request.body.password;
if (username amp;amp; password) {
response.redirect('/home');
} else {
response.send('Please enter Username and Password!');
response.end();
}
});
и это мой интерфейс
Loggin.js
handleLogin = () => {
const { username, password } = this.state;
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
user: {
username: username,
password: password
}
})
};
fetch('http://localhost:8080/auth', requestOptions)
.then(response => response.json())
.then(data => {
console.log(data.success)
if (data.success) {
window.location = "/home";
}
});
}
Но не работает. Когда я утешаю.имя пользователя и пароль в журнале указаны как неопределенные
Я пытался найти решение, прежде чем публиковать здесь, но я не могу его найти, и я не знаю, что я делаю не так.
Любая помощь будет оценена.
Ответ №1:
Проблема в том, что интерфейс отправляет тело типа:
body = {
user: {
username: 'value',
password: 'value'
}
}
но на серверной части вы читаете username
и password
непосредственно из body
объекта. Либо обновите свою серверную логику, чтобы:
app.post('/auth', function(request, response) {
var username = request.body.user.username;
var password = request.body.user.password;
if (username amp;amp; password) {
response.redirect('/home');
} else {
response.send('Please enter Username and Password!');
response.end();
}
});
или ваш интерфейс для:
body: JSON.stringify({
username: username,
password: password
});
Комментарии:
1. Большое вам спасибо! это устранило мою проблему. Я этого не проверял.
Ответ №2:
Ваше приложение react ожидает ответа в формате JSON, но получает обычный текст. попробуйте что-то вроде
response.json({error: 'Please enter Username and Password!'});
Комментарии:
1. Спасибо, я пробовал, но, как и POST, не работает, потому что при консоли. зарегистрируйте пользователя и пароль, они пусты.