Redux-Saga передает заголовки на вызов axios.post
У меня есть некоторые трудности с redux-saga
, У меня есть следующая сага:
createPostSaga
:
function* createPostSaga(action) {
const token = yield select(selectToken);
const headerParams = {
Authorization: `JWT ${token}`
};
console.log(token, headerParams);
try {
yield call(axios.post, "/posts/", action.payload, headerParams);
yield call(getPosts());
} catch (error) {
console.log(error);
}
}
Как видите, я выбираю свой токен и помещаю в объект ключ Authorization
и значение JWT ${token}
мой API все еще отвечает 401 unauthorized
, но это должно быть проблемой с этим вызовом, потому что я могу повторить этот вызов в Postman, и он проходит нормально:
Кто-нибудь видит, что я сделал не так?
1 ответ
Решение
Попробуйте создать функцию извлечения и использовать ее внутри .call
,
function* createPostSaga(action) {
const token = yield select(selectToken);
const headerParams = {
"Authorization": `JWT ${token}`
};
const apiCall = () => {
return axios.post('/posts', {
action.payload // only if not an object. Otherwise don't use outer {},
},
headerParams: headerParams,
).then(response => response.data)
.catch(err => {
throw err;
});
}
console.log(token, headerParams);
try {
yield call(apiCall);
yield call(getPosts());
} catch (error) {
console.log(error);
}
}
Вы должны вызвать функцию, как это.
function* createPostSaga(action) {
const token = yield select(selectToken);
const headerParams = {
Authorization: `JWT ${token}`
};
console.log(token, headerParams);
try {
yield call(axios.post, "/posts/", action.payload, {headers:headerParams});
yield call(getPosts());
} catch (error) {
console.log(error);
}
}