Egg.js构建一个stream流式接口服务实现详解

 更新时间:2023年09月20日 14:15:34   作者:天問  
这篇文章主要为大家介绍了Egg.js构建一个stream流式接口服务实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

经常需要用到 stream 流式接口服务,比如:大文件下载、日志实时输出等等。本文将介绍如何使用Egg.js构建一个 stream 流式接口服务。

Egg.js Stream API

一、准备工作

目录结构:

app/
    /controller
        index.js
        test.txt
        test.sh
  • index.js 控制器
  • test.txt 测试文件,最好是20M以上的文件,这样才能看出流式返回的效果
  • test.sh 测试脚本,用于实时输出日志的测试脚本

二、流式文件处理

  • controller/index.js 文件内容如下:
'use strict';
const Controller = require('egg').Controller;
const { createReadStream } = require('fs');
const { join } = require('path');
class HomeController extends Controller {
  async testStream() {
    const { ctx } = this;
    ctx.set('Content-Type', 'text/plain; charset=utf-8');
    const stream = createReadStream(join(__dirname, './test.txt'));
    ctx.body = stream;
  }
}
module.exports = HomeController;

三、流式日志处理

  • controller/index.js 文件内容如下:
'use strict';
const Controller = require('egg').Controller;
const { createReadStream } = require('fs');
const { join } = require('path');
const { spawn } = require('child_process');
class HomeController extends Controller {
  async testStream() {
    ctx.set('Content-Type', 'text/plain; charset=utf-8');
    const shPath = join(__dirname, './test.sh');
    const stream = spawn('sh', [ shPath ]);
    ctx.body = stream.stdout;
  }
}
module.exports = HomeController;
  • controller/test.sh 文件内容如下:
#!/usr/bin/env sh
set -e
int=1
while(( $int<=10 ))
do
    echo $int
    sleep 2
    let "int++"
done

四、测试

前端使用 fetch 方法进行测试,为什么不用 axios ?因为 axios 是基于 XMLHttpRequest 的,不支持流式接口。 具体实现请参考:前端实现 stream 流式请求

以上就是Egg.js构建一个stream流式接口服务实现详解的详细内容,更多关于Egg.js构建stream流式接口服务的资料请关注脚本之家其它相关文章!

相关文章

  • js+div+css下拉导航菜单完整代码分享

    js+div+css下拉导航菜单完整代码分享

    本文主要分享了js+div+css下拉导航菜单的完整代码。可直接复制保存到HTML文件就可以体验效果。下面跟着小编一起来看下吧
    2016-12-12
  • JS实现图片高斯模糊切换效果的焦点图实例

    JS实现图片高斯模糊切换效果的焦点图实例

    这篇文章主要给大家介绍了利用原生JS如何实现图片高斯模糊切换效果的焦点图,文中给出了完整的实例代码,相信对大家的理解和学习具有一定的参考借鉴价值,下面来一起看看吧。
    2017-01-01
  • js字符串转换成xml对象并使用技巧解读

    js字符串转换成xml对象并使用技巧解读

    在js中有方法可以将字符串转化为xml对象,感兴趣的朋友可以参考下面的代码片段,希望对你有所帮助
    2013-04-04
  • 图解js图片轮播效果

    图解js图片轮播效果

    这篇文章主要以图片展示的方式向大家讲解了js图片轮播效果的实现方法,对图片轮播实现原理进行了详细介绍,感兴趣的朋友可以参考一下
    2015-12-12
  • js中精确计算加法和减法示例

    js中精确计算加法和减法示例

    这篇文章主要介绍了js中如何精确计算加法和减法,需要的朋友可以参考下
    2014-03-03
  • JS+Canvas实现满屏爱心和文字动画的制作

    JS+Canvas实现满屏爱心和文字动画的制作

    Canvas 适合绘制大数据量图形元素的图表(如热力图、地理坐标系或平行坐标系上的大规模线图或散点图等),也适合实现某些视觉特效。本文就来利用Canvas实现满屏爱心和文字动画的制作,感兴趣的可以了解一下
    2022-11-11
  • stackoverflow常用工具库总结

    stackoverflow常用工具库总结

    这篇文章主要为大家介绍了stackoverflow常用工具库总结,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • JavaScript数组的5种迭代方法

    JavaScript数组的5种迭代方法

    这篇文章主要为大家详细介绍了JavaScript数组的5种迭代方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • JavaScript 中如何实现大文件并行下载

    JavaScript 中如何实现大文件并行下载

    本文将介绍如何利用 async-pool 这个库提供的 asyncPool 函数来实现大文件的并行下载。
    2021-05-05
  • 解决layui动态加载复选框无法选中的问题

    解决layui动态加载复选框无法选中的问题

    今天小编就为大家分享一篇解决layui动态加载复选框无法选中的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09

最新评论