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实现简单抽奖小功能

    js实现简单抽奖小功能

    这篇文章主要为大家详细介绍了js实现简单抽奖小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • JavaScript 实现自己的安卓手机自动化工具脚本(推荐)

    JavaScript 实现自己的安卓手机自动化工具脚本(推荐)

    这篇文章主要介绍了 JavaScript 实现自己的安卓手机自动化工具脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • JS实现控制表格行文本对齐的方法

    JS实现控制表格行文本对齐的方法

    这篇文章主要介绍了JS实现控制表格行文本对齐的方法,涉及javascript操作表格样式的相关技巧,需要的朋友可以参考下
    2015-03-03
  • javascript 用函数语句和表达式定义函数的区别详解

    javascript 用函数语句和表达式定义函数的区别详解

    本篇文章主要介绍了javascript 用函数语句和表达式定义函数的区别。需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • 原生JS实现天气预报

    原生JS实现天气预报

    这篇文章主要为大家详细介绍了原生JS实现天气预报,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 微信小程序填写用户头像和昵称实现方法浅析

    微信小程序填写用户头像和昵称实现方法浅析

    这篇文章主要介绍了微信小程序填写用户头像和昵称实现方法,我们使用小程序往往能碰到提示允许获取用户头像昵称,这种功能怎么实现呢?本篇文章带你探索
    2023-02-02
  • JavaScript作用域链示例分享

    JavaScript作用域链示例分享

    作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。
    2014-05-05
  • JS简单模拟触发按钮点击功能的方法

    JS简单模拟触发按钮点击功能的方法

    这篇文章主要介绍了JS简单模拟触发按钮点击功能的方法,涉及JavaScript事件调用机制及事件触发的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • js遍历子节点子元素附属性及方法

    js遍历子节点子元素附属性及方法

    遍历子节点子元素的方法有很多,本例使用js来实现,另附示例代码及属性方法,需要的朋友可以参考下
    2014-08-08
  • js循环中使用正则失效异常的踩坑实战

    js循环中使用正则失效异常的踩坑实战

    这篇文章主要给大家介绍了关于js循环中使用正则失效异常的踩坑实战,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-05-05

最新评论