如何在提取请求中获取响应的标头?

时间:2019-10-09 21:05:28

标签: reactjs redux http-headers fetch response

我正在尝试获取获取请求后的响应标头,并为我的redux状态分配一些值。我只能访问标头的Promise。我会为您找出原因提供帮助。

export function sign_in(email, password){
return (dispatch) => {
    dispatch({ type: 'LOGGING_USER_IN' });    
    return fetch("http://localhost:3000/api/v1/auth/sign_in" ,{
        method: "POST",
        cache: "no-cache",
        credentials: "same-origin",
        headers: {
            "Content-Type": "application/json; charset=utf-8"
        },
        body: JSON.stringify({
            email: email,
            password: password
        })
    })
    .then(response => { 
        dispatch({type:'LOGGING_USER_IN_SUCCESS', payload: response.headers})
    })
    .catch(error =>{
        dispatch({type:'LOGGING_USER_IN_FAILURE', payload: error, error:true})
    })
}    
};

我的减速器:

export default function authReducer(state = {
isLoaded: false,
}, action) {

switch (action.type) {
    case 'LOGGING_USER_IN':
        return  {
            ...state,
        }

    case 'LOGGING_USER_IN_SUCCESS':
        // console.log(action.payload.get("access-token"))
        return  {
            // ...state,
            isLoaded: true,
            user: action.payload}

    case 'LOGGING_USER_IN_FAILURE':
        return{
            ...state,
            isLoaded: true,
            errorMessage: action.payload.message}

    default:
        return state;
}
}

1 个答案:

答案 0 :(得分:0)

response.headers是一个Headers{}对象,代表HTTP响应标头。

您需要通过调用get(name)来查找要分派的标头,或者可以使用forEach来获得所有标头,如下所示:

.then(response => {
    const payload = {};
    response.headers.forEach((value, name) => payload[name] = value);
    dispatch({type:'LOGGING_USER_IN_SUCCESS', payload })
})

demo

附注: 仅公开以下标头:

  • 缓存控制
  • 内容语言
  • 内容类型
  • 到期
  • 最后修改
  • 编译指示

因此,如果要访问任何其他标头,则需要适当设置Access-Control-Expose-Headers标头。

source