nodejs逐字读取文件示例

news/2024/9/28 21:06:37 标签: javascript, 开发语言, ecmascript

像chatpGPT显示文字一样.主要是服务器流式返回数据.前端用for await读取response.body 

<button id="fetchjson" onclick="FetchJSON()">fetch json看console与network</button>
<button id="fetchstream" onclick="FetchStream()">fetch stream</button>
<div id="outputBox"></div>

<script>
  async function FetchJSON(){
    console.log('触发请求')
let response=await fetch('/json')
console.log('got response headersnow wating for the body')
let myObject=await response.json()
console.log('turned the JSON  in an object')
console.log(myObject)
  }
  async function FetchStream(){
    outputBox.textContent=''
    let response=await fetch('/json')
    const decoder=new TextDecoder('utf-8')
    for await (const value of response.body){

      const chunk=decoder.decode(value)
      console.log('======chunk',chunk);
      outputBox.textContent+=chunk
    }
  }
</script>

 

const http = require('http');
const fs = require('fs');
const path = require('path');

/** 创建一个服务器 */
const server = http.createServer((req, res) => {
  //serve HTML
  if (req.method === 'GET' && req.url === '/') {
    const filePath = path.join(__dirname, 'index.html');
    fs.readFile(filePath, (err, data) => {
      res.writeHead(200, { 'Content-type': 'text/html' })
      res.end(data);
    });
    return
  }
  //serve JSON,but slowly
  if (req.method === 'GET' && req.url === '/json') {
    res.writeHead(200, { 'Content-type': 'application/json' })
    //set up a readable stream
    const filePath = path.join(__dirname, 'data.json')
    const stream = fs.createReadStream(filePath, { 'encoding': 'utf8' });
    //read the stream on byte (character) at a time and send it to the client
    stream.on('readable', function () {
      const interval = setInterval(() => {
        const data = stream.read(2);
//这里的stream.read(1)如果填1的话,遇到中文传输一个字,遇到英文也是一个字母
        console.log('======data', data);
        if (data !== null) {
          res.write(data);
        } else {
          clearInterval(interval);
          res.end();
        }
      }, 2000);

    })
    return
  }
});
const PORT = 3000
server.listen(PORT, () => {
  console.log(`Server is listening on port ${PORT}`)
})


 

 


http://www.niftyadmin.cn/n/5681849.html

相关文章

从0新建一个微信小程序实现一个简单跳转

首先 1.从这里下载开发工具 https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/getstart.htm 2. 等下载完毕后 创建一个空白项目 在pages目录下右键创建一个page : testUI,这时候会生成四个文件 新建一个文件夹 testUI 给他们放一起 3.增加一个按钮 …

WSL (Linux)配置 Rust 开发调试环境

WSL &#xff08;Linux&#xff09;配置 Rust 开发调试环境 安装 Rust&#xff1a;安装 Rust 环境 - Rust语言圣经(Rust Course) 除了执行以上步骤&#xff0c;还得安装编译工具&#xff1a; sudo apt-get update sudo apt-get install build-essential配置 VSCode&#xff1a;…

数据结构与算法——Java实现 20.习题——二叉树层序遍历

认真的人改变自己&#xff0c;执着的人改变命运 —— 24.9.27 102. 二叉树的层序遍历 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a; 输入&#xff1a;root [1] 输出&#xff1a;[[1]]示例 3&…

繁体字能申请注册商标吗?

有些主体为了表现企业历史和文化&#xff0c;喜欢用繁体字申请注册商标&#xff0c;那繁体字可以能申请注册商标吗&#xff0c;当然是可以的&#xff0c;普推知产老杨检索在1990年《国家工商行政管理局商标局关于商标可否使用繁体字问题的答复》&#xff0c;可以使用繁体字&…

Centos8.5.2111(1)之本地yum源搭建和docker部署与网络配置

由于后边可能要启动多个服务&#xff0c;避免服务之间相互干扰&#xff0c;本课程建议每个服务独立部署到一台主机上&#xff0c;这样做会导致资源占用过多&#xff0c;可能会影响系统的运行。服务器部署一般不采用GUI图形界面部署&#xff0c;而是采用命令行方式部署&#xff…

怎么绕开华为纯净模式安装软件

我是标题 众所周不知&#xff0c;华为鸿蒙系统自带纯净模式&#xff0c;而且 没法关闭 : ) 我反正没找到关闭键 以前或许会有提示&#xff0c;无视风险&#xff0c;“仍要安装”。但我这次遇到的问题是&#xff0c;根本没有这个选项&#xff0c;只有“应用市场”和“取消”&…

从零开始手写STL库:Priority_Queue

从零开始手写STL库–Priority_Queue的实现 Gihub链接&#xff1a;miniSTL 文章目录 从零开始手写STL库–Priority_Queue的实现一、priority_queue是什么&#xff1f;二、堆是什么&#xff1f;三、priority_queue要包含什么函数总结 一、priority_queue是什么&#xff1f; 优先…

docker安装sonarqube进行代码的质量检测,主要包括语法的检测

注意:下面的操作在安装Jenkins的虚拟机上操作 要在 Docker 中安装 SonarQube,可以使用 Docker Compose 来简化安装过程。以下是详细的步骤和配置: 1. 创建 docker-compose.yml 文件 首先,在一个新的目录中创建一个 docker-compose.yml 文件,内容如下: version: "…