GET请求关闭了意外的连接

时间:2019-04-18 19:43:26

标签: node.js http heroku

我在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

这似乎不是代码错误。我不知道它可能来自哪里,所以我要求帮助。谢谢!

2 个答案:

答案 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')}`
          }
      }
   }
})

[...]

我认为这不是处理此错误的最佳方法,但似乎还可以。