我正在使用Redux Promise Middleware并编写我的动作创建者
export const getProject = () => ({
type: "GET_PROJECT",
payload: axios.get(process.env.SERVICE_URL + '/project/')
})
以便自动附加_FULFILLED和_REJECTED . 这很好用 . 在使用Redux Promise Middleware之前,我正在使用动作本身内部的调度来接近我的行为,这样:
export function fetchTypes(){
return function(dispatch) {
axios.get(process.env.SERVICE_URL + "/kinds/", {
headers: {
'Authorization': 'JWT ' + sessionStorage.jwt
}
})
.then((response) => {
dispatch({ type: "FETCH_TYPES_FULFILLED", payload: response.data })
})
.catch((err) => {
dispatch({ type: "FETCH_TYPES_REJECTED", payload: err })
})
}
}
更冗长,更重复 . 这种方法的问题是我必须在我创建的每个动作上附加 Headers . 我现在要做的是编写一个中间件来更新有效负载并将JWT令牌附加到API请求,这样我就不必在每个操作创建器中执行它,并检查令牌到期 . 这可行吗?我已经阅读过关于中间件的博客和帖子,但是在调用next(action)之前找不到挂钩请求并添加属性的方法 . 或者我可能只是以错误的方式处理问题?
1 回答
例如,您可以创建名为
api.js
的单独文件 . 在那里,您可以描述您的API函数,例如fetchKinds
等 . 您的操作函数不应包含API逻辑,它们用于调度正确的操作 .