Tag: stream

在NodeJS中stream到MongoDB

我使用模块streamToMongoDB的node.js从Web APIstream到MongoDB。 var streamToMongoDB = require("stream-to-mongo-db").streamToMongoDB; var JSONStream = require("JSONStream"); var request = require("request"); var fs = require("fs"); // where the data will end up var outputDBConfig = { dbURL : "mongodb://user:password@0.0.0.0/test", collection : "temperature" }; // create the writable stream var writableStream = streamToMongoDB(outputDBConfig); // create readable stream and consume it request("http://0.0.0.0:8081/getTemp") .pipe(JSONStream.parse('*')) .pipe(writableStream); […]

将video上传到节点中的url

在我的应用程序中,我想发布一个video到多个networking(fb,twitter …),我正在上传video到cloudinary,它发回的url,我用来张贴到fb。 对于Twitter,无法通过url发布video。 有没有其他办法可以做到这一点? 我的服务器尺寸很低,如1-2GB,所以我不能下载video到我的服务器,然后创build一个stream上传到Twitter。 我担心,如果3-4名用户开始上传,那么我的服务器将崩溃,内存不足。 任何build议使用twit包或简单的HTTP请求是受欢迎的。 谢谢

同时写入和读取节点stream

我试图下载一个video文件,然后立即开始stream式传输到客户端,我有他们都独立工作的stream,但我似乎无法得到我想要的function工作。 request.on('response', function (fileResponse) { fileResponse.pipe(fs.createWriteStream(`${__dirname}/../media/${channelName}/${media}.mp4`) } stream式传输现有video: const file = fs.createReadStream(`${__dirname}/../media/${channelName}/${media}.mp4`, {start, end}); const head = { 'Content-Range': `bytes ${start}-${end}/${fileSize}`, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': 'video/mp4', }; res.writeHead(206, head); 如果我把第二段代码放到最初的一段代码的响应事件中(试图创buildstream然后开始同时阅读),它不起作用。 我正在试图做技术上可能的stream? 谢谢!

如何在Node.js中closureshttpsstream

我正在通过https加载一个.ndjson文件。 我想在阅读100行文件后closures它。 const amount = 100; https.get(url, (res) => { var { statusCode } = res; if (statusCode !== 200) { throw new Error(`Request Failed.\n Status Code: ${statusCode}`); } res.setEncoding('utf8'); let rows = []; res .pipe(ndjson.parse()) .on('data', function (obj) { rows.push(obj); if (rows.length === amount) { this.end(); } }) .on('end', () => { resolve(rows); }); […]

为什么我不能用Vagrantbuild立VS Code开发环境?

我正在尝试使用Vagrant设置一个vscode开发环境。 我的主机操作系统是Windows 7和我的客户操作系统,Ubuntu。 这是我的stream浪文件: Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" config.vm.provider "virtualbox" do |v| v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"] end config.vm.provision :shell, path: 'bootstrap.sh', keep_color: true end 而这个脚本我正在运行bootstraping apt-get update echo "Installing build tools" apt-get install -y build-essential apt-get install -y make g++ git curl vim python python-software-properties apt-get install -y libsecret-1-dev libx11-dev libxkbfile-dev echo […]

如何从一个带有多个源文件的gulp任务一次返回所有的stream?

我写的一口气的任务打破了我的主要任务中的runSequence。 它必须在其他任务之间运行,如下所示: runSequence( … ':build:prod:staticIndex', ':build:prod:typeDocToMD', // << this is my task ':build:prod:staticDocumentation', …etc 而它之后的任务从未被执行。 这使我认为我的任务不会返回一个单一的stream或不正确。 这是我的任务看起来如何: gulp.task(':build:prod:typeDocToMD', (done: any) => { let taskNum: number = 0; let streams = []; let filesPath = [ path.join(__CONFIG.TMPL_DOCS_PATH, '**/*.md') ]; glob(filesPath.toString(), function (er, files) { taskNum = files.length – 1; files.forEach((filename) => { let stream = gulp.src(filename) […]

在NodeJS中不断从stream中生成sha1哈希

我想从stream中读取数据时更新的stream不断生成SHA1哈希。 我需要但不会工作: const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.update('abc'); console.log(hash.digest('hex')); // hash of abc hash.update('def'); console.log(hash.digest('hex')); // hash of abcdef 这将不起作用,因为一旦调用了hash.digest(),就不能再次调用hash.update()。 每次添加块时,如何获得string的散列? 没有将整个string加载到内存中 …而不是将整个string再次写入哈希,而是重新使用已经写好的数据块加上新的数据块。 Node.js文档中的所有示例都要求stream在计算SHA1之前结束。 一旦发生这种情况,您不能再将数据写入stream中。 https://nodejs.org/api/crypto.html#crypto_class_hash const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.on('readable', () => { const data = hash.read(); if (data) { console.log(data.toString('hex')); // Prints: // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 } }); […]

在Mac OS X上产生的NodeJS进程的pipe道中未处理的stream错误

伙计们! 我正在尝试在NodeJS下构build自己的git服务器。 使用HTTP所有的作品都很好,但是我在ssh2会话中推送过程中遇到了问题。 client.on('session', (accept, reject) => { accept() .on('exec', (accept, reject, info) => { let channel = accept(), command = info.command, regexp = /git-(upload|receive)-pack\'\/(.*?).git\'$/, matches = command.match(regexp); //.. some code //.. command looks like 'git-receive-pack /Users/mykhailobielan/projects/git_server/repos/06565f90-9e22-11e7-94e7-815f98a3fa17.git' command = command.split(' '); var child = spawn(command.shift(), command); child.stdout.pipe(channel); channel.pipe(child.stdin); channel.on('close', (code) => channel.exit(0)); channel.on('error', (code) => […]

通过不同的可读stream对相同的可写stream进行两次pipe道操作

我试图连接一个string和一个可读stream(可读stream指向一个文件,可能有多个数据块,即文件可能很大)到一个可写入的stream,以便可写入的stream可以最终写入到一个目的地。 我正在encryption文件的string和内容,然后对它们应用zlib压缩,最后我想pipe他们到可写入的stream。 要做到这一点,我可以: a)将文件内容转换为一个string,然后连接string然后encryption,进行压缩,然后将其pipe道化为可写入的stream。 但这是不可能的,因为文件的大小可能很大,因此我不能将其内容转换为string。 b)我可以先encryption和压缩string,然后将string转换成stream,然后将其完全传输到可写入stream中,然后将文件内容传送到相同的可写入stream中。 为此,我写了这个: var crypto = require('crypto'), algorithm = 'aes-256-ctr', password = 'd6FAjkdlfAjk'; var stream = require('stream'); var fs = require('fs'); var zlib = require('zlib'); // input file var r = fs.createReadStream('file.txt'); // zip content var zip = zlib.createGzip(); // encrypt content var encrypt = crypto.createCipheriv(algorithm, password, iv); var w = […]

数据事件中可丢失的stream丢失块中的第一个/最后一个字符

我使用ssh2-sftp客户端nodeJS来连接到sftp服务器,并获得一个文件但是我遇到了一个问题,当更多的块比一个,数据没有被正确接收,它之间丢失一个字符: 例如:sftp上的文件有'sftp文件中的一些string' 如果它被分成大块,接收到的数据将如下所示: 第一块:“一些stringf” 第二个劈:'om sftp文件' 在这个例子中,'r'丢失了 const getFile = readable => new Promise((resolve, reject) => { let file = ''; readable.on('data', (chunk) => { file += chunk; }); readable.on('end', () => resolve(file)); readable.on('error', reject); }); const readable = await sftp.get(fileName, false); sftp.get()返回NodeJS.ReadableStream 有人遇到同样的问题吗?