当前位置: 首页 > news >正文

nodejs逐字读取文件示例

像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 HTMLif (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 slowlyif (req.method === 'GET' && req.url === '/json') {res.writeHead(200, { 'Content-type': 'application/json' })//set up a readable streamconst 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 clientstream.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}`)
})

 

 

相关文章:

  • 防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)
  • 如何恢复被删除的 GitLab 项目?
  • 前端Vue.js与后端Flask/Django协同开发指南
  • 修改DNS地址有什么影响
  • 选择更轻松:山海鲸可视化与PowerBI的深度对比
  • RP2040 C SDK GPIO和IRQ 唤醒功能使用
  • Angular与Vue的全方位对比分析
  • uni-app 封装websocket 心跳检测,开箱即用
  • 原码反码补码移码
  • 快速创建第一个Spring Boot 项目
  • 【Python】Flask-Admin:构建强大、灵活的后台管理界面
  • 避免glibc版本而报错,CentOS等Linux安装node.js完美方法
  • 展锐平台的手机camera 系统isptool 架构
  • 外贸电商系统卷轴模式开发:技术深度解析与实践
  • QEMU使用Qemu-Guest-Agent传输文件、执行指令等
  • 【React系列】如何构建React应用程序
  • ES6 学习笔记(一)let,const和解构赋值
  • java小心机(3)| 浅析finalize()
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS字符串转数字方法总结
  • leetcode98. Validate Binary Search Tree
  • SpiderData 2019年2月16日 DApp数据排行榜
  • SQLServer之索引简介
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 给第三方使用接口的 URL 签名实现
  • 码农张的Bug人生 - 见面之礼
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 延迟脚本的方式
  • 数据可视化之下发图实践
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • # .NET Framework中使用命名管道进行进程间通信
  • # 职场生活之道:善于团结
  • #java学习笔记(面向对象)----(未完结)
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (003)SlickEdit Unity的补全
  • (AngularJS)Angular 控制器之间通信初探
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (算法)大数的进制转换
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)SpringBoot3---尚硅谷总结
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .Net IE10 _doPostBack 未定义
  • .NET 使用 XPath 来读写 XML 文件
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 药厂业务系统 CPU爆高分析
  • .NET开发人员必知的八个网站
  • .net连接oracle数据库
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .skip() 和 .only() 的使用
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析