Использование axios для пост-запроса и получения ответа - PullRequest
0 голосов
/ 20 марта 2019

извлечение данных из ответа axios возвращает неопределенное значение, когда console.logged Я пробовал несколько способов, но ответ всегда показывает неопределенное Это userdata const userdatas = [{id: 1, firstname: "Leanne", lastname: "Gram", пароль:" 123 ", телефон:" 9474211442 "} **

Клиент

handleSubmit=(e)=>{ 
              alert(this.state.Firstname)
              e.preventDefault();
              axios.post('http://localhost:3001/login', {
                lastname: JSON.stringify(this.state.Lastname),
                firstname: JSON.stringify(this.state.Firstname),
                password:JSON.stringify(this.state.password),
                phoneno:JSON.stringify(this.state.phoneno)

              }).then(res=>alert(res.data.id))



            }

]

Экспресс

 const userdatas=[  {id: 1,firstname: "Leanne",lastname:"Gram",password: "123",phone:"9474211442"}**

app.post('/login',(req,res)=>{
let logindetail={firstname:req.body.firstname,
password:req.body.password}
logindetail.firstname=logindetail.firstname.replace(/['"]+/g, '')
logindetail.password=logindetail.password.replace(/['"]+/g, '')


var count = Object.keys(userdatas).length;

for(var i=0;i<count;i++)
{
if(logindetail.firstname===userdatas[i].firstname&&logindetail.password===userdatas[i].password)
{
  res.json(userdatas[i])
}

}

});

Ответы [ 3 ]

0 голосов
/ 20 марта 2019

Сначала userdatas - это объект, и вы пытаетесь получить доступ к его значениям, как в массиве. Во-вторых, вы уверены, что условие if внутри цикла будет выполнено один раз? Потому что вы не можете иметь несколько ответов на один запрос. Создайте одно тело ответа в переменной во время цикла. Отправьте его после завершения цикла.

for (var i = 0; i < count; i++) {
  if (
    logindetail.firstname === userdatas[i].firstname &&
    logindetail.password === userdatas[i].password
  ) {
    res.json(userdatas[i]);
  }
}

Измените его на что-то вроде этого

   let result = [];
    for (var i = 0; i < count; i++) {
      if (***your corrected condition***) {
        result = userdatas[i];
      }
    }

   res.send(result);
0 голосов
/ 20 марта 2019

Видя, что то, что вы получаете на бэкэнде, кажется неправильным, я бы снова обратился к запросу веб-интерфейса.ИМХО, вам нужно иметь только один вызов JSON.stringify для всего объекта, который вы хотите обернуть, а не отдельный вызов для каждого объекта.Попробуйте это и посмотрите, что получит серверная часть.

0 голосов
/ 20 марта 2019

В вашем Express разделе userdatas представляется объектом, но вы пытаетесь найти его как массив в вашем вызове res.json. Вам нужно обернуть его в Object.keys, как при настройке значения счетчика.

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