- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试实现可读流的 ._read
功能,当调用 ._read
并且没有数据时会出现问题,文档说我可以 push('')
直到有更多数据出现,并且我应该只在流永远不会有更多数据时 return false
。 https://nodejs.org/api/stream.html#stream_readable_read_size_1
但它还表示,如果我需要这样做,那么我的设计就存在严重错误。 https://nodejs.org/api/stream.html#stream_stream_push
但我找不到替代方案。
代码:
var http = require('http');
var https = require('https');
var Readable = require('stream').Readable;
var router = require('express').Router();
var buffer = [];
router.post('/', function(clientRequest, clientResponse) {
var delayedMSStream = new Readable;
delayedMSStream._read = function() {
var a=buffer.shift();
if(typeof a === 'undefined'){
this.push('');
return true;
}
else {
this.push(a);
if(a===null) {
return false;
}
return true;
}
};
//I need to get a url from example.com
https.request({hostname:'example.com'}, function(exampleResponse){
data='';
exampleResponse.on('data',function(chunk){data+=chunk});
exampleResponse.on('end',function(){
var MSRequestOptions = {hostname: data, method: 'POST'};
var MSRequest = https.request(MSRequestOptions, function(MSResponse){
MSResponse.on('end', function () {
console.log("MSResponse.on(end)");//>>>
});//end MSResponse.on(end)
}); //end MSRequest
delayedMSStream.pipe(MSRequest);
});
});
clientRequest.on('data', function (chunk) {
buffer.push(chunk);
});
clientRequest.on('end', function () {//when done streaming audio
buffer.push(null);
});
});//end router.post('/')
解释:客户端向我的服务器发送一个 POST 请求流式音频,我的服务器从 example.com
请求一个 url,当 example.com
响应该 url 时,我的服务器将音频流式传输到
什么是更聪明的方法?
最佳答案
因此,如果我正确理解代码,您:
除了你的方法之外,还有其他方法可以做到这一点,如果你稍微改进命名,即使你的方法在我看来也会更清晰。此外,将巨大的请求拆分为几个责任范围较小的功能可能会有所帮助。
我会这样制作端点:
let http = require('http');
let https = require('https');
let Readable = require('stream').Readable;
let router = require('express').Router();
let buffer = [];
/**
* Gets some data from a remote host. Calls back when done.
* We cannot pipe this directly into your stream chain as we need the complete data to get the end result.
*/
function getHostname(cb) {
https.request({
hostname: 'example.com'
}, function(response) {
let data = '';
response.on('error', err => cb(err)); // shortened for brewity
response.on('data', function(chunk) {
data = data + chunk;
});
response.on('end', function() {
// we're done here.
cb(null, data.toString());
});
});
}
router.post('/', function(request, response) {
// first let's get that url.
getHostname(function(err, hostname) {
if (err) { return response.status(500).end(); }
// now make that other request which we can stream.
https.request({
hostname: hostname,
method: 'POST'
}, function(dataStream) {
dataStream.pipe(response);
});
});
});
现在,如评论中所述,使用 streams2,您不必管理流。对于 0.10 之前的 Node 版本,您必须收听“读取”、“数据”等事件,对于较新的 Node 版本,它会得到处理。此外,您在这里甚至不需要它,流足够智能,可以自行处理背压。
关于node.js - 我应该用什么代替 readableStream.push ('' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34520036/
我想从 Blob 中获得可读形式。 import {Readable} from 'stream'; const data: Blob = new Blob( ); const myReadable:
我有一个使用@types/whatwg-fetch 版本 0.0.32 的项目。 运行我的项目时出现以下错误。 ERROR in /node_modules/@types/whatwg-fetch/i
我使用 HTML 文件输入从我的设备存储中访问一个文件,然后我将该文件作为流读取。 是否有任何内置方法可以将每次读取的长度限制为特定字节数。 const stream = myFile.stream(
我想加载整个 fetch一口气响应,但似乎没有 readAll 或类似的功能。 从 ReadableStreamDefaultReader 读取每个字节的最高效方法是什么?成一个Uint8Array
我正在尝试使用 fetch与 ReadableStream 。在此示例中,ReadableStream 应该简单地无限期地重复“Some data...”。 fetch('/', { method
如何从 ReadableStream 对象获取信息? 我正在使用 Fetch API,但我没有从文档中看到这一点。 正文作为 ReadableStream 返回,我只想访问此流中的属性。在浏览器开发工
我正在使用的内部库提供 NodeJS.ReadableStream , 我需要传递给 nodemailer (附件),作为参数Readable . Argument of type 'Buffer
我从服务器接收到一个 ReadableStream,它是从我的 fetch 调用返回的。 返回一个 ReadableStream 但我不知道如何从这个阶段触发下载。我不能在 href 中使用 url,
我有一组从 fetch() 调用中返回的 Promise: const fetchResults = [ promise , promise , promise ] 每个 Promise 的 .bod
我有 PNG 图像作为 ReadableStream,我需要以这个 ReadableStream 作为源显示 html 元素 img。我应该把它转换成什么吗?或者我该怎么做? 谢谢你的回答 最佳答案
我正在尝试使用 StreamSaver 下载大文件 (500mb - 2gb) 它在 Chrome 上工作正常但是正如你在这里看到的 ReadableStream {locked: false} lo
我想在我的 NextJS 应用程序中显示 Google Place Photos。要从指定的 URL 获取这些图像,需要 API key ,但与此同时,我不想向公众公开此 API key 。 我的目标
我目前正在尝试创建一个实用程序来解析 PDF 中的注释。我可以很好地加载 PDF 文件,注释对象也很好,但我需要获取与这些注释相关的文本(带下划线、突出显示等)。 当我尝试使用失败的 getTextC
我有一个 React 应用程序,它向我的 Rails API 发送 POST 请求。我希望我的 API 端点生成一个 csv 文件,然后将该文件发送回 React 应用程序。我希望浏览器为最终用户下载
我查看了所有互联网,但无法为我的新项目找到解决方案。我正在使用 simple-git 包,类型定义包括对 ReadableStream 的几个引用。 Typescript 在转译过程中出现错误(“找不
我正在使用 ODATA NPM 包通过 REST 调用获取 ODATA。 (我认为这基本上只是一个用于获取的包装器)。 嗯,我正在使用await/try/catch来捕获错误,并且我想获取错误的正文。
我正在尝试实现可读流的 ._read 功能,当调用 ._read 并且没有数据时会出现问题,文档说我可以 push('') 直到有更多数据出现,并且我应该只在流永远不会有更多数据时 return fa
我想了解流的工作原理。我有一个 readableStream,我正在将其通过管道传输到 writableStream。 但是,当我这样做时,我在控制台中收到此错误。 无法在“ReadableStrea
我正在使用 fetch 从服务器动态加载图像。如何在我的 HTML 中使用返回的 ReadableStream 作为图像源?在下面的代码示例中,data.body 是一个 ReadableStream
我正在实现一个可读流。在我的 _read() 实现中,流的来源是需要异步调用的 Web 服务。为什么 _read() 不提供可在异步调用返回时调用的 done 回调函数? Transform 流和 W
我是一名优秀的程序员,十分优秀!