Я столкнулся с этой странной проблемой, у меня две формы построены с реакцией, одна для регистрации, а другая для входа. Я делаю ajax-запрос, передающий содержимое формы регистрации на экспресс-сервер, тело получает синтаксический анализ, и я получаю содержимое от req.body без каких-либо проблем, однако, когда я делаю то же самое для формы входа, мой бэкэнд-сервер не получает никакого контента, такого как электронная почта и пароль, но если это делается с почтальоном, он отлично работает, ниже приведен код для вызова ави с ajax из реакции
login: function (e) {
e.preventDefault();
console.log(this.refs.loginpassword.value);
var userdata = {
"email": this.refs.loginusername.value,
"password": this.refs.loginpassword.value
}
console.log(userdata);
$.ajax({
type: "POST",
contentType:"application/json",
datatype:"jsonp",
Data: userdata,
url: "http://localhost:5000/signin",
success: function (data) {
console.log(data);
},
error: function (err) {
console.log(err);
}
})
},
если я запишу пользовательские данные в консоль, я вижу, что поля заполнены, но они не получены на бэкэнд, следующий код написан на сервере backend express
app.post('/signin', function(req,res,next){
console.log(req.body);
passport.authenticate('local-login',{
successRedirect:'/profile',
failureRedirect:'/failureredirect',
failureFlash:true
})(req,res,next)}
это перенаправляет на маршрут "/failureredirect", не ударяя по стратегии входа в систему при проверке, я узнал, что тело пуст, здесь не получено никакого контента, но если я попрошу тот же маршрут с почтальоном, процесс аутентификации работает очень хорошо, что здесь не так. Помните, что я настроил тело, хорошо разбираясь в экспресс-сервере, поэтому он отлично работает для регистрации, но не для входа.
У вас есть три проблемы:
Вы передаете jQuery объект, а не строку JSON. Он будет кодировать его с использованием стандартных методов кодирования формы.
Либо удалите претензию, которую используете JSON:
contentType:"application/json",
или используйте JSON.stringify
для преобразования объекта в JSON.
Выбор, который вы выберете, будет зависеть от настроек вашего тела-парсера на стороне сервера.
datatype:"jsonp",
JavaScript чувствителен к регистру. Свойство dataType
имеет капитал T
в середине.
JSONP, однако, несовместим с запросами POST. Вероятно, это должно быть:
dataType: "json"
... но это зависит от того, какой ответ ваш серверный код делает.
Data: userdata,
Снова JavaScript учитывает регистр. Свойство называется data
, а не Data
.
Вздох, проблема заключалась в запросе ajax, в запросе ajax ключевые данные были записаны как данные, которые сделали его неработоспособным,
$.ajax({
url: "http://127.0.0.1:5000/login",
type: "POST",
datatype:"JSON",
Data: userdata,
success: function (data) {
console.log(data);
},
error: function (err) {
console.log(err);
}
})
измените Data: userdata на данные: userdata, и он работает. Запросы ajax чувствительны к регистру.
type: "POST"
наmethod: "POST"
. Также звучит похоже на stackoverflow.com/questions/48828554/…