我正在处理需要捕获用户audio及其在服务器上的操作的项目。 为了加快预览过程,并在录制结束时跳过长时间上传,我们正在testingstream式套接字Socket.io。 虽然我们确实得到它的工作,缺less的东西,文件播放,但最终报告“内部数据stream错误”,ogg和wav格式。 客户端代码: var mediaRecorder,mystream; var last = false; var socket = io('http://localhost:3000'); var mediaConstraints = { audio: true }; function onMediaSuccess(stream) { mystream=stream; mediaRecorder = new MediaStreamRecorder(stream); mediaRecorder.mimeType = 'audio/ogg'; mediaRecorder.audioChannels = 1; mediaRecorder.ondataavailable = function (blob) { socket.emit('stream', {'user':1,'last':last,'data':blob}); }; mediaRecorder.onstop = function() { last= true; }; mediaRecorder.start(3000); } function onMediaError(e) { […]
我在我的MySQL数据库(大约一千万行)有一个大的表,我需要把所有这些数据转换成JSON格式。 对于较小的表,我会使用基本的connection.query("SELECT * FROM TABLE, function(err, results) {}); syntax。但是,我不想将整个表加载到内存中。 我注意到,mysql模块有能力“stream”行( https://github.com/felixge/node-mysql/#streaming-query-rows ),所以我想知道是否仍然将整个表加载到内存和那么只是给我们一行一行,或者它实际上每次只加载一行,所以整个表不会一次存储在内存中。
我一直在学习NodeJS中的Streams,特别感兴趣的是作为NodeJS HTTP Server参数提供的'request'和'response'stream。 节点是否做了一些特殊的事情,将传入的请求和传出响应转换成NodeJSstream? 例如,在一个可读的请求stream中,节点就像改变数据从客户端发送到HTTP Web服务器的方式,以便能够将请求暴露给我作为一个NodeJSstream,在那里我可以通过块读取数据块,使用'可读'事件? 或者,所有的http请求都是默认的分块数据stream,而其他的web框架在历史上只是把我暴露给数据stream做得非常糟糕,并且自动caching,所以我将会得到一个完整的请求对象默认…经常阻塞,而在后台的框架等待每一个stream的块进来,而我不知道呢? 基本上我不太了解HTTP。 我看到这篇关于分块传输编码的文章https://en.wikipedia.org/wiki/Chunked_transfer_encoding ,但是我还不清楚这是NodeJS利用的。 任何解释或指向我的方向一些教程将不胜感激。
我是一个网页devise的新手,正如你所想象的,尝试成为一个像SaSS,NPM和Grunt这样的全栈开发者是一个巨大的学习曲线。 我有一个样板WordPress主题,包含一个粗鲁的工作stream程与sass,缩小器,BrowserSync和所有有趣的东西。 但在工作stream程中没有autoprefixer,我想添加它,因为我想开始testingFlexBoxdevise,并需要大量的前缀才能正常工作。 我在网上search了如何简单地将Auto Prefixer添加到gruntfile ,所有的答案都是超级含糊的,就像“只要把这个代码添加到grunt.js文件”一样。 这应该是一个“后处理”, grunt.js似乎是按照它将完成任务的顺序编写的。 我也不熟悉任何的语法,所以只是说“包含它”没有帮助,我总是担心我没有把它放在一定的括号之后或分号正确之前。 我只想让别人明确地告诉我,我需要把代码放在grunt.js文件中。 作为奖励,我想把这个添加到我的package.json文件中,以便将来当我启动一个新项目并运行我的初始“install npm”命令时,它将下载auto prefixer并准备出去大门。 SO tldr; 如何下载自动前缀? (这是文件夹中的一组文件?在我的项目中应该在哪里文件的文件夹去,以防万一我安装在错误的地方最初通过命令行)在哪里我需要添加autoprefixer代码我的Grunt.js文件? 最后,在我第一次input“install npm”的时候,我需要在我的package.json文件中包含哪些内容以确保autoprefixer包含在将来的项目中? 我将包括我当前的Grunt.js文件和package.json文件,这样你们就可以简单地复制/粘贴必要的代码给我。 这将帮助我在未来知道如何将新stream程添加到我的工作stream程。 这是我的Grunt.js文件: module.exports = function ( grunt ) { 'use strict'; // Load all grunt tasks matching the 'grunt-*' pattern require( 'load-grunt-tasks' )( grunt ); // Time how long tasks take. require('time-grunt')(grunt); // Get this […]
我从一段时间以来一直在使用Node.js的asynchronousfunction。 但是我陷入了一个有趣的问题。 基本上我有2个API,我需要一个接一个地调用。 由于Node.js的asynchronous性质,我不能检索第一个API请求的响应,直到它完成并调用相应的callback函数。 我想要做的是,我想要将第一个API作为请求负载的响应传递给第二个API,而不是等到第一个API完全完成。 作为一种可能的替代scheme,我应该从构buildrest API转换到streamAPI吗? 任何指针如何做到这一点? 谢谢
我有一个充满seleniumtesting的摩卡文件。 当我从正常的命令行运行摩卡时,由于颜色模块,我得到了这个不错的格式化和彩色输出。 这看起来不错,工作起来很奇妙,但手动运行只能在单个环境下运行testing。 为了在多个环境中并行运行testing,Sauce Labs(Selenium云托pipe)build议产生摩卡subprocess。 我在我们的项目中build立了一个Gulp任务。 gulp.task('test', function () { var targets = [ 'windows.chrome', 'windows.firefox', 'windows.ie', 'mac.chrome', 'mac.firefox', 'mac.safari', 'linux.chrome', 'linux.firefox' ]; function run_mocha(target, done) { var env = Object.assign({}, process.env); env.TARGET = target; var mocha = exec('mocha ./test/test-runner.js', {env: env}, done); ['stdout', 'stderr'].forEach((stream) => mocha[stream].on('data', (data) => process[stream].write(`${target}:${data}`)) ); } var jobs = […]
我第一次尝试2,我遇到了一些麻烦。 我正在处理我的数据通过一系列的stream,我想从我的转换function。 文档说,我应该使用this.push从我的转换函数中获取数据,然后在完成时调用callback函数,所以我试图用pipe道来做这件事(因为它应该做同样的事情,对不对?) ,但是我得到一个writeAfterEnd错误。 我的代码和堆栈跟踪如下,但我不知道该怎么做。 有人能指出我正确的方向吗? 代码 – function run(chunk, encoding, callback) { this.on("finish", function(){ console.log("this finished") callback() }) dataStream = new stream.Readable({objectMode: true}); dataStream._read = function noop(){}; dataStream.push(chunk); dataStream.pipe(sass()).pipe(this) } gulp.src("./web-src/scss/add_post.scss").pipe(through.obj(run)).on('data', function(chunk){console.log(chunk)}) 堆栈跟踪 – events.js:85 throw er; // Unhandled 'error' event ^ Error: write after end at writeAfterEnd (/Volumes/BackRoom/Dropbox/Timpani/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:198:12) at DestroyableTransform.Writable.write (/Volumes/BackRoom/Dropbox/Timpani/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js:243:5) at write […]
在MyWritableStream中发出错误事件后,数据传输停止。 我需要做什么来恢复数据传输? var readable = fs.createReadStream('test.txt'); var writable = new MyWritableStream(); writable.on('error', function(error) { console.log('error', error); // How i can resume? }); writable.on('finish', function(){ console.log('finished'); }) readable.pipe(writable);
在尝试使用Node.JSstream时,我遇到了一个有趣的难题。 当input(可读)stream推送更多的数据,然后目的地(可写)关心我无法正确应用背压。 我尝试的两个方法是从Writable.prototype._write返回false,并保留对Readable的引用,以便可以从Writable调用Readable.pause() 。 这两个解决scheme都没有帮助,我会解释。 在我的练习中(你可以把完整的源代码看成一个Gist ),我有三条stream: 可读 – PasscodeGenerator util.inherits(PasscodeGenerator, stream.Readable); function PasscodeGenerator(prefix) { stream.Readable.call(this, {objectMode: true}); this.count = 0; this.prefix = prefix || ''; } PasscodeGenerator.prototype._read = function() { var passcode = '' + this.prefix + this.count; if (!this.push({passcode: passcode})) { this.pause(); this.once('drain', this.resume.bind(this)); } this.count++; }; 我认为来自this.push()的返回代码足以让自己暂停,并等待drain事件恢复。 变换 – 哈希 util.inherits(Hasher, stream.Transform); […]
我使用Exceljs快速创buildExcel数据 我想在内存中caching这个东西,然后使用Koa发送给用户。 Exceljs的write方法需要一个writableStream: workbook.xlsx.write(writableStream, options) 但Koa预计可读stream: response.body = readableStream 我知道我可以把一个可读的stream转换成一个可写的stream,但是我怎么做相反的? 我希望Exceljs写入可写入stream,并从相同的stream读取Koa。 我非常沮丧的streamAPI! 其他20个事情中,我试过这个: const ReadableStream = require("memory-streams").ReadableStream const reader = new ReadableStream() const writer = new stream.Writable({ write: function(chunk, encoding, next) { console.log(chunk.toString()) // reader.push(chunk, encoding) next() } }) const reader = new MemoryStream(null, {readable: true}) // reader.write = reader.unshift const writer = reader workbook.xlsx.write(writer, […]