接口状态码取消时的原因分析及解决办法

 2024-02-01 01:04:07  阅读 0

这是我参加文章挑战的第二天。 详情请查看:文章挑战

问题复发

调试接口时,get请求可以正常访问后端服务,但是post请求总是超时。 加大axios超时时间后,报错(信息如下)。 一般意思是:输入过程中IO错误,连接超时。

错误信息

输入时 I/O 错误; 是组织....: .on

问题分析

网上查了也没找到这个错误的具体原因。 首先,您需要找出问题是在客户端还是在服务器上,并分别使用与前端应用程序相同的接口。 结果如下:

查了资料得知请求体是流数据。 如果已经在其他地方被消费了,如果不进行特殊处理,后续的应用程序将无法消费它! 也就是说,在消耗请求体的地方,我认为项目中配置了mock-serve。 很有可能是mock-的问题。

检查mock-的配置并发送以下代码:

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
    extended: true
}))

.json 用于解析json数据格式。 。 用于解析我们平时表单提交的数据,即请求头包含这样的信息: -Type: /x-www-form-

-Type的四种常见类型:

。 该模块用于解析req.body的数据。 解析成功后会覆盖原来的req.body。 如果解析失败,则为{}。 这个模块有一个属性,官方介绍如下:

与 URL- 数据一起使用(当为 false 时)或 qs(当为 true 时)。 为真,但使用已。

大致意思是:该选项允许配置使用(false)或qs(true)来解析数据。 默认值为 true,但不再支持。

解决方案:

接口地址配置:

    proxy: {
      '/api': {
        target: 'http://localhost:18000',
        changeOrigin: true,
        ws: true,
        secure: false,
        pathRewrite: {
          '^/api': '/'
        }
      }
    }
    before: require('./mock/mock-server.js')

其实我不明白为什么我的项目中配置了代理还用?

注释掉mock-中与body配置相关的代码。 再次请求,问题解决。

总结

如果后端代码中设置了拦截器,需要消费请求体,那么后端应该复制请求体并向下传递。 服务器基于微服务架构。 18000端口为网关端口,18002为具体服务端口。 当网关服务以调试模式启动时,也会引起接口请求。 作为一名Web开发者,储备http相关知识还是很有必要的。

参考文章:

……

//喷射…

标签: 请求 解析 端口

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码