使用koa框架以及管道,错误的请求一直处于pending挂起状态

问题描述:

后端使用的是koa框架,并且使用了管道进行转发。当需要转发的链接无法访问时,该http请求会一直处于pending挂起状态。

而在另一份代码,使用express框架开发,也使用了pipe管道进行转发,但是此时,即使目标url有问题,请求也能正常处理,不会处于挂起状态。

分析:

  • 因为promise?
    • 查阅资料,说是可能是因为koa基于promise处理,最终没有进行resolve或者reject,导致的处于pending这种情况。
    • 但是实际操作了一下,没有解决该问题

  • 因为koa,非express?
    • 两个项目,一个是epxress的,一个是koa,确实,另一个express的没有出现这个问题。

  • 因为管道?
    • 根据以往的经验,在没有使用管道,普通的http请求情况下,确实没有出现过这种pending挂起情况。
    • 但是在pipe管道中,是进行了on error监听的,并且打印了一下,能监听到已经出现错误,是有响应的,但是为什么会出于pending状态呢?
    • 正常url可以正常返回,当url不通或者错误时候,就会出现这种问题。
    • 初步分析,可能是在管道的错误捕获中有什么猫腻。因为第一次碰见管道,不是很了解,还需要继续测一下。

  • 实锤,因为ctx.respond = false:
    • 在koa中,使用管道前,设置了ctx.respond=false, 查阅资料,发现问题就处在这里。
    • 该设置表示不使用koa自动封装返回,而自行处理。问题就在这里,当目标url正常请求时,直接原封不动返回了。但是当请求出错时,这里没有进行返回
    • 而另一个express的代码,监听on error后,使用res.send(err)进行了响应,返回错误信息。
    • 而koa中,一般都是通过ctx.body进行设置。但是这里不行,因为进行了ctx.respond = false设置,koa不会处理。所以需要自行封装进行返回。
    • 因此,使用ctx.end(err),自行返回错误。经检验,问题解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值