Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React redux正在调度一个API操作,显然,请求发回401错误_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript React redux正在调度一个API操作,显然,请求发回401错误

Javascript React redux正在调度一个API操作,显然,请求发回401错误,javascript,reactjs,redux,Javascript,Reactjs,Redux,我正在尝试在我的应用程序上创建用户身份验证。我创建了一个api,当在应用程序上发出请求时将调用该api,因此它可以使用我在请求对象中传递的id获取用户的数据 我现在遇到的问题是,当调用该api时,由于用户尚未登录,令牌为null,并且不会执行操作(userLoaded)以分派我捕获的getError和AuthError。catch应分派 我的redux控制台显示已调度userLoaded,但未调度getError和AuthError 这是代码 The reducer import {AUTH_E

我正在尝试在我的应用程序上创建用户身份验证。我创建了一个api,当在应用程序上发出请求时将调用该api,因此它可以使用我在请求对象中传递的id获取用户的数据

我现在遇到的问题是,当调用该api时,由于用户尚未登录,令牌为null,并且不会执行操作(userLoaded)以分派我捕获的getError和AuthError。catch应分派

我的redux控制台显示已调度userLoaded,但未调度getError和AuthError

这是代码

The reducer
import {AUTH_ERROR, LOGIN_FAIL, LOGIN_SUCCESS, LOGOUT_SUCCESS, REGISTER_FAIL, REGISTER_SUCCESS, USER_LOADED, USER_LOADING} from '../action/types'

const initialState = {
  token : localStorage.getItem('token'),
  isAuthenticated : null,
  isLoading : false,
  user : null
}

export default function (state=initialState, action){

  switch (action.type) {

    case USER_LOADING:
      
      return {
        ... state,
        isLoading : true
      }

    case USER_LOADED:
      
      return {
        ...state,
        isAuthenticated :true,
        isLoading : false,
        user : action.payload
      }

    case LOGIN_SUCCESS:
    case REGISTER_SUCCESS:
      
      return {
        ...state,
        ...action.payload,
        isAuthenticated : true,
        isLoading : false
      }

    case AUTH_ERROR:
    case LOGIN_FAIL:
    case REGISTER_FAIL:
    case LOGOUT_SUCCESS:
      localStorage.removeItem('token') 
      
      return {
        ...state,
        token : null,
        isLoading : false,
        isAuthenticated : false,
        user : null
      }
  
    default:
      return state
  }



}

This is the action
import {AUTH_ERROR, LOGIN_FAIL, LOGIN_SUCCESS, LOGOUT_SUCCESS, REGISTER_FAIL, REGISTER_SUCCESS, USER_LOADED, USER_LOADING} from './types'

import {returnError} from './errorActions'


// So the first thing i have to do here is to check for a token and load it

export const userLoaded = () => (dispatch, getState) => {

  dispatch({type: USER_LOADING})

  // get the token from the current state

  const token = getState().auth.token

  // creating our header 

  const req = {
    headers : {"Content-Type":"application/json"}
  }

  // check if there's a token and if we have it, then we add it to the headers

  if(token){
    req.headers['x-auth-token'] = token
  }

  fetch('http://127.0.0.1:8000/auth/user', req)
  .then(res => res.json())
  .then(data => dispatch({
    type : USER_LOADED,
    payload : data
  }))
  .catch(err => {
    dispatch(returnError(err.response.data, err.response.status))
    dispatch({type: AUTH_ERROR})
  })
}





使用fetch,只有在连接断开或类似情况下才会抛出错误。Fetch仍然会将401或500作为一个成功的请求来处理——这有点正确,因为在连接级别上没有发生任何错误。因此,您必须自己检查结果状态代码并进行相应的处理。

使用fetch,只有在连接断开或类似情况下才会抛出错误。Fetch仍然会将401或500作为一个成功的请求来处理——这有点正确,因为在连接级别上没有发生任何错误。因此,您必须自己检查结果状态代码并进行相应处理。

谢谢您的回答。老实说,我仍然无法理解如何使用FetchAPI处理这种情况,但是,由于我切换到axios,代码现在可以正常工作了。我仍然不明白为什么要使用axios。我真的希望我能完全理解你的意思,但我知道你是对的,所以我会接受答案,但如果你能更好地向我解释,我将非常感激。
fetch('http://127.0.0.1:8000/auth/user然后(res=>{if(res.code>299){throw Error(“Error”);}返回res;})
你只需要用自己的代码检查一下自己就行了。好了,现在我明白你的意思了!谢谢你抽出时间。非常感谢你的回答。老实说,我仍然无法理解如何使用FetchAPI处理这种情况,但是,由于我切换到axios,代码现在可以正常工作了。我仍然不明白为什么要使用axios。我真的希望我能完全理解你的意思,但我知道你是对的,所以我会接受答案,但如果你能更好地向我解释,我将非常感激。
fetch('http://127.0.0.1:8000/auth/user然后(res=>{if(res.code>299){throw Error(“Error”);}返回res;})
你只需要用自己的代码检查一下自己就行了。好了,现在我明白你的意思了!谢谢你抽出时间。我很感激