这是我参加文章挑战的第二天。 详情请查看:文章挑战
问题复发
调试接口时,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相关知识还是很有必要的。
参考文章:
……
//喷射…