почему мой ajax-запрос не отправляет содержимое в req.body?

-1

Я столкнулся с этой странной проблемой, у меня две формы построены с реакцией, одна для регистрации, а другая для входа. Я делаю 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", не ударяя по стратегии входа в систему при проверке, я узнал, что тело пуст, здесь не получено никакого контента, но если я попрошу тот же маршрут с почтальоном, процесс аутентификации работает очень хорошо, что здесь не так. Помните, что я настроил тело, хорошо разбираясь в экспресс-сервере, поэтому он отлично работает для регистрации, но не для входа.

  • 0
    Попробуйте изменить type: "POST" на method: "POST" . Также звучит похоже на stackoverflow.com/questions/48828554/…
  • 0
    не повезло с изменением типа: «POST» на метод: «POST»
Теги:
authentication
passport.js

2 ответа

0
Лучший ответ

У вас есть три проблемы:

Вы передаете jQuery объект, а не строку JSON. Он будет кодировать его с использованием стандартных методов кодирования формы.

Либо удалите претензию, которую используете JSON:

   contentType:"application/json",

или используйте JSON.stringify для преобразования объекта в JSON.

Выбор, который вы выберете, будет зависеть от настроек вашего тела-парсера на стороне сервера.


   datatype:"jsonp",

JavaScript чувствителен к регистру. Свойство dataType имеет капитал T в середине.

JSONP, однако, несовместим с запросами POST. Вероятно, это должно быть:

dataType: "json"

... но это зависит от того, какой ответ ваш серверный код делает.


   Data: userdata,

Снова JavaScript учитывает регистр. Свойство называется data, а не Data.

  • 0
    спасибо за глубокое понимание, я уже исправил это. Как только я столкнулся с какой-либо другой проблемой, относящейся к CORS, с моего экспресс-сервера я хочу перенаправить в другой домен, из которого инициируется запрос. Я настроил разрешения cors для сервера, но он не может перенаправить на маршрут, скажем, нет контроля доступа, разрешить наличие заголовка источника на запрошенном ресурсе.
-2

Вздох, проблема заключалась в запросе 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 чувствительны к регистру.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню