记一次使用Nuxt框架 connect ECONNREFUSED ::1:9001 错误的排错过程

开始我使用asyncData的时候使用axios发送了请求,但是我在访问页面的时候一直显示connect ECONNREFUSED ::1:9001
在这里插入图片描述

我是在这里使用了封装的axios请求

  async asyncData({params, app}) {
    return vod.getPlayAuth(params.vid).then(response => {
      return {
        vid: params.vid,
        playAuth: response.data.data.playAuth
      }
    })
  },
//  vod.js
import request from "@/utils/request";

export default {
// 根据视频id获取播放凭证
getPlayAuth(vid) {
  return request({
    url: `/eduvod/video/getPlayAuth/${vid}`,
    method: 'get',
  })
},
}

// @/utils/request
const service = axios.create({
baseURL: 'http://localhost:9001', // api的base_url
timeout: 40000 // 请求超时时间
})

在搜索资料的时候发现是因为框架无法连接到地址::1:9001上的服务器,我在9001端口配置了nginx作请求转发,我这时想可能是请求转发出了问题,所以我又手动调用了axios请求尝试直接访问本地服务的原始端口

  async asyncData({params, error}) {
   return axios.get(`https://localhost:8003/eduvod/video/getPlayAuth/${params.vid}`)
     .then(res => {
       return {
         playAuth: res.data.data.playAuth,
         vid: params.vid
       }
     })
 },

这里我出现了一个更复杂的错误
在这里插入图片描述

搜索资料后发现我这里使用了https请求头,但是我没有配置证书,我修改成http之后代码可以正常运行了,所以现在问题就出现在nginx代理服务器上。

这时我又仔细看了看一开始错误提示,发现网站无法访问到的是 IPV6 回环地址上的9001端口,所以我猜想是不是nginx没有转发IPV6的请求,我搜索了一下相关资料发现果然是这样,然后我在nginx配置文件上加上了IPV6的回环地址,代码果然可以运行了!

    server {
        listen       9001;  # 监听端口
        listen [::1]:9001;
        server_name  localhost;  # 主机名称

这时我还有疑问,之前在create()回调函数里面发送的axios请求都可以正常转发,为什么这里就不行了呢,原来在异步请求中发送的请求是在Node.js环境里进行发送的,而在Node.js里面把请求地址里的localhost解析成了::1;而在create()函数里的请求是在浏览器里进行发送的,在浏览器里把localhost解析成了127.0.0.1,这才导致了我在使用异步请求时出现了之前没有碰到的错误。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值