Tag: nodejs stream

访问节点ReadStream

我有一个包裹在承诺中的代码片段。 这段代码从http读取图像,做各种事情,最后把它发送到aws.s3.putObject。 看起来像这样(简化):请注意forms是多方对象。 form.on('part', (part) => {//form is multiparty fileCount++; let tmpFile = path.join(os.tmpDir(), `${userId}_${timePrefix}_${path.basename(part.filename)}`); part.pipe(fs.createWriteStream(tmpFile)); part.on('end', () => { resolve(fs.createReadStream(tmpFile)); }); part.once('error', (error) => { handleError(error); }); }); form.once('error', (error) => { handleError(error); }); form.parse(request); }).then((imageStream) => { //here is a call to AWS S3.putObject. Which return a promise }).then(() => { return new […]

Nodejs中用于组合多个可读stream的策略

我试图解决一个Nodejsstream挑战。 我已经多次阅读了关于stream的节点文档,并且尝试了不同的尝试来解决这个挑战。 尝试使用双面打印,转换,可读和可写:) 我有多个HTTP可读stream,目标是发送数据到一个单一的pipe道,背压工作。 我认为这张照片有助于解释这个挑战: 更新(2017年9月13日)。 再次阅读文档后,我正在实现一个自定义写入双工stream。

Node.js应用程序,用于stream式传输video,如何从其他一些IP捕获。

该应用程序将托pipe在局域网上。 每当有人打开应用程序。 屏幕上出现两个选项。 您可以设置自己的videostream或订阅其他人的videostream。 该stream是一个video缓冲区,正在您的浏览器或您正在订阅的用户的浏览器上播放。 对于播放video,我们可以简单地使用HTML5播放器。 为了订阅别人的stream,我应该创build一个IP地址将被input的文本框和一个button来开始获取stream。 有人可以帮助我做出决定,最好的方法吗? TIA

process.stdout.write / process.stderr.write monkey-patch在subprocess中工作,但不是父进程

所以我在process.stdout.write / process.stderr.write上有这个简单的猴子补丁 const strm = fs.createWriteStream(logfile); const stdoutWrite = process.stdout.write; process.stdout.write = function () { strm.write.apply(strm,arguments); stdoutWrite.apply(process.stdout, arguments); }; (对于process.stderr,它是相同的,正在写入同一个stream)。 问题: 当我用node x.js运行这个过程 该stream在closures之前并不完成全部写入,甚至不closures。 但是,如果我跑 $ node y.js # this runs x.js in child process 现在在子节点中运行的stream将完成写入,并且日志文件现在已满。 为什么会这样? 在使用fs.appendFileSync ,有没有一种方法可以确保在stream程closures之前数据stream将会stream失? 编辑: 我想我知道为什么会发生这种情况 – 我正在调用process.exit() ,它会提前closures进程,并可能在stream完成之前调用。 有没有一种方法来听stream何时写完? 如果调用process.exit()时,在stream上调用finish(),那似乎是一个人为的“完成”。 我试图等待“stream失”事件,但似乎从来没有开火。

unit testing使用请求,pipe道和stream使用模拟的私有方法

我想在下面的代码中unit testing导出的方法。 我想嘲笑私有方法中的值来控制返回的Promise的拒绝/parsing。 client是已经连接到数据库的node-postgres对象。 我知道我可以使用proxyquire来取出所需的库,但我怎样才能模仿链接的方法.on('error', …) .pipe(stream)和.on('end', …)我可以控制返回的值。 注意 ,显示的导出方法是对真实导出方法的简化,导出importDomain是不可行的。 const copyFrom = require('pg-copy-streams').from const request = require('request') const Promise = require('bluebird') // private function importDomain (client, domain) { return new Promise((resolve, reject) => { let stream = client.query(copyFrom(`COPY ${domain.table} FROM STDIN;`)) let req = request(`${domain.url}`) req.on('error', reject) req.pipe(stream) .on('error', reject) .on('end', resolve) }) } […]