分类 琐碎 下的文章

KOA与stream的一个坑

绝对不要使用 ctx.body = request.get(stream_link)

在我的一个本地Server中,制作了一个解析视频网站视频流的API

大概的形式是这样的,

由 nodejs 向 视频网站请求流,然后使用ctx.body = request.get(stream_link)的方式向本地播放器输出流。

但是这其中有一个非常大的问题,就是在关闭播放器,KOA也获取到 ECONNRESET 错误的情况下,无法 destory Request的流。

这就导致即使关闭了播放器,nodejs依然在下载对应的那个视频,如果多切换几个视频,后台就会有多个下载任务占用带宽。

找了半天没有找到处理办法,KOA的相关讨论也只是说尽量不要给ctx.body设置为HTTP流。

最后直接Hack了一下,在app上直接监听Error事件,发生ECONNRESET的时候直接process.exit(0),反正后台有 forever的Daemon。

至少目前还没有找到可靠的处理方法。

如果可以处理的话,思路大概这样,将HTTP stream的引用暂存起来,读取ECONNRESET,并且与对应的ctx对应,找到 stream ,想办法结束流。

这个就留待以后实现吧,仅在此做一个记录

关于Node.js的依赖管理

关于Nodejs的依赖管理

npm和yarn之类的工具能够自动化引入和构建依赖,但是最近发现一个比较坑的地方。

在npm上发布的package一般来说会锁定其所依赖的包的版本

我在使用request-promise的时候,发现request-promise已经依赖了tough-cookie,于是在把几个代码文件迁移到另一个项目的时候没有重新添加tough-cookie的依赖,导致中间解析cookie时出现了很多莫名其妙的错误,遂重新添加依赖后才成功。

也就是说,当一个项目越做越大以后,里面的包的依赖关系将会变得更加复杂,一个包所依赖的其他包的可能包含了某个package的多个版本。而随着package的增多,这种臃肿的包将会越来越多。

不禁想反思一下前端这个步子是不是迈得太大了

API停止

Typecho竟然有0day,已更新迁移到新版本,API ALL down,转至其他地方