我正试图从商店行动中进行GET调用 . 但是我的 Vue.http.get()
电话会抛出 TypeError
"this is null" .
我完全失去了,我还没有找到其他人在其他地方遇到这个具体问题 . 任何帮助,将不胜感激 . 谢谢
演练
-
用户导航到/ login /
-
提交登录
-
已通过身份验证和令牌
-
调度保存令牌和检索配置文件的操作
-
尝试使用
Vue.http
内部操作时发生错误
注意,令牌正确地存储在state和localStorage中 .
Login.vue
methods: {
submit() {
this.$http.post(
this.loginEndpoint,
this.object
).then(response => {
this.$store.dispatch({
"type": "auth/save",
"token": response.body.key,
}).then(() => {
this.$router.push({name: "home"})
}).catch(error => {
console.log(error)
})
}).catch(error => {
console.log(error)
})
}
}
商店
import Vue from 'vue'
import Vuex from 'vuex'
import Auth from '../stores/auth.js'
// plugins
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
auth: Auth,
},
})
auth.js - 存储模块
import Vue from 'vue'
export default {
namespaced: true,
state: {
token: null,
profile: {},
},
mutations: {
setProfile(state, payload) {
state.profile = payload.profile
},
setToken(state, payload) {
state.token = payload.token
},
},
actions: {
save: (context, payload) => {
return new Promise((resolve, reject) => {
const url = "/rest-auth/user/"
context.commit('setToken', {
token: payload.token,
})
localStorage.setItem("token", payload.token)
console.log("get user profile")
// *** Error below calling Vue.http.get ***
// TypeError: this is null
Vue.http.get(url).then(response => {
console.log("Profile received")
context.commit('setProfile', {
profile: response.body,
})
localStorage.setItem("profile", response.body)
resolve()
}).catch(error => {
reject(error)
})
})
},
},
}
堆栈跟踪
TypeError: this is null
Stack trace:
@webpack-internal:///10:42:9
exec@webpack-internal:///6:1150:21
Client/<@webpack-internal:///6:1179:13
PromiseObj@webpack-internal:///6:200:24
Client@webpack-internal:///6:1143:16
Http@webpack-internal:///6:1400:12
Http[method$$1]@webpack-internal:///6:1431:16
save/<@webpack-internal:///14:112:17
save@webpack-internal:///14:90:20
wrappedActionHandler@webpack-internal:///7:604:15
dispatch@webpack-internal:///7:347:7
boundDispatch@webpack-internal:///7:272:12
submit/<@webpack-internal:///17:100:17
1 回答
事实证明,我的Vue实例中的代码导致了问题 . 在那里,我将csrf值推送到
X-CSRFTOKEN
标头 .我正在使用Django和DRF . 我刚刚从
SessionAuthentication
切换到使用TokenAuthentication
,现在已经知道不需要传递csrf令牌 .下面的代码来自我的
main.js
,删除后问题解决了 .违规代码
究竟为什么这会导致
TypeError
被抛出我不能说 .