我在heroku上托管了一个节点js api,还有两个与该API链接的vue-js应用程序。第一个vue js应用程序运行正常。第二个反应奇怪。前两个请求(登录并获取用户列表)工作正常,但是无论我尝试执行什么操作,即使请求相同的用户列表,连接也会丢失,并且会记录CORS问题。
这两个应用程序的网址位于api的allowedOrigins
标头中,并且在本地可以正常工作。
这是当我尝试第二次获取用户列表或任何其他请求时的HTTP响应:
Connection close
Content-Length 0
Date Thu, 18 Apr 2019 19:25:08 GMT
Server Cowboy
这是我的服务器的日志:
info heroku router req=0e6f8359… at=info method=OPTIONS path="/api/v1/admin/get-all-users" host=domain.herokuapp.com request_id=0e6f8359-0f78-4b42-995d-fe34a6b6c658 fwd="XX.XXX.XXX.XXX" dyno=web.1 connect=0ms service=3ms status=200 bytes=540 protocol=https
info heroku router req=8dd33943… at=info method=GET path="/api/v1/admin/get-all-users" host=domain.herokuapp.com request_id=8dd33943-4e34-4774-b0ec-0f2f893934cb fwd="XX.XXX.XXX.XXX" dyno=web.1 connect=0ms service=39ms status=200 bytes=10915 protocol=https
info heroku router req=cc73307c… at=info method=OPTIONS path="/api/v1/admin/get-all-users" host=domain.herokuapp.com request_id=cc73307c-18c5-45b9-844c-08e63d1f7ae6 fwd="XX.XXX.XXX.XXX" dyno=web.1 connect=0ms service=3ms status=200 bytes=538 protocol=https
这似乎不是代码错误。我不知道它可能来自哪里,所以我要求帮助。谢谢!
答案 0 :(得分:0)
第三个呼叫使用的是method=OPTIONS
而不是method=GET
。您需要找到一种方法来使您的api将第三个请求识别为GET
请求。
答案 1 :(得分:0)
我找到了解决此问题的方法。我在所有vuex存储请求中都使用了axios的非常规全局实例。
const HTTP = axios.create({
baseURL: process.env.VUE_APP_BASE_URL,
headers: {
'Authorization': {
toString () {
return `Bearer ${localStorage.getItem('admin-token')}`
}
},
'Accept': 'application/json'
}
})
通过在每个请求上创建axios的新实例,我的服务器不会发送304响应。
import axios from 'axios'
import jwtDecode from 'jwt-decode'
[...]
axios({
baseURL: process.env.VUE_APP_BASE_URL,
url: '/api/v1/dr_claims/deliver-dr',
method: 'POST',
headers: {
'Authorization': {
toString () {
return `Bearer ${localStorage.getItem('admin-token')}`
}
}
}
})
[...]
我认为这不是处理此错误的最佳方法,但似乎还可以。