Не получен ответный код http в моем коде - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь передать полезную нагрузку аутентификации в бэкэнд API и получить код ответа, при обработке кода ответа об ошибке, он всегда приходит как неопределенный.Мы не можем определить правильный код ошибки http.В первом цикле я могу получить ответ http-кода в

catch(function (error) {
      reject(console.log("errorin firstcatch", error.response.status));
      });
    })

, однако в функции авторизации ошибка становится неопределенной.

const authMock = (username, password)=>
  new Promise((resolve, reject)=>{
    let payload ={
      username:username,
      password:password
    }
    // const loginToken=generateJwt(payload);
    // let headers = {
    //   "loginToken" : loginToken
    // }
    axios.post(apiBaseUrl,payload)
    .then(function (response){
      console.log("status", response.data.status_code);
      if(response.status == 200||204){
        resolve({token:response.data.access_token,
                 firstName:response.data.FirstName,
                 lastName:response.data.LastName,
                 profilePic: response.data.image})

      }
      else{
        console.log("login rejected") 
        // reject({ status: 401 });
      }
    })
    .catch(function (error) {
      reject(console.log("errorin firstcatch", error.response.status));
      });
    })

function* authorize({ payload: { username, password } }) {
  try {
    const { token, firstName, lastName, profilePic } = yield call(authMock, username, password);
    yield put({ type: AUTH_SUCCESS, payload: {token, firstName, lastName, profilePic} });
    localStorage.setItem('token', token);
    localStorage.setItem('firstName', firstName);
    localStorage.setItem('lastName', lastName);
    localStorage.setItem("profilePic", profilePic);
  } catch (error) {
    let message;
    console.log("error", error);
    switch (error) {
      case 500: message = 'Internal Server Error'; break;
      case 401: message = 'Wrong user ID'; break;
      case 403: message = "Invalid credentials"; break;
      default: message = "Something went wrong!"; break;
    }
    yield put({ type: AUTH_FAILURE, payload: message });
    localStorage.removeItem('token');
    localStorage.removeItem('firstName');
    localStorage.removeItem('lastName');
    localStorage.removeItem('profilePic');
  }
}

function* Saga() {
  yield takeLatest(AUTH_REQUEST, authorize);
}

1 Ответ

0 голосов
/ 13 мая 2019

Проверьте эту часть своего кода, возможно, потребуется небольшой рефакторинг:

axios.post(apiBaseUrl,payload)
    .then(function (response){
        console.log("status", response.data.status_code);
            if(response.status == 200||204){
                resolve({
                    token:response.data.access_token,
                    firstName:response.data.FirstName,
                    lastName:response.data.LastName,
                    profilePic: response.data.image
                })
            }

      }

Вам не хватает шага, на котором вы GET получите информацию, которую POST изд:

axios.post(apiBaseUrl, payload)
    .then(() => axios.get('URL')) <-- Add another endpoint to get the stored payload
    .then((response) => { <-- Now the response should contain the status
        console.log("status", response.data.status_code);
            if(response.status == 200 || 204){
                resolve({
                    token:response.data.access_token,
                    firstName:response.data.FirstName,
                    lastName:response.data.LastName,
                    profilePic: response.data.image
                })
            }

      }
...