我有一个大的JavaScript对象,我想转换为JSON并写入一个文件。 我以为我可以用像这样的stream来做到这一点 var fs = require('fs'); var JSONStream = require('JSONStream'); var st = JSONStream.stringifyObject() .pipe(fs.createWriteStream('./output_file.js')) st.write(large_object); 当我尝试这个时,我得到一个错误: stream.js:94 throw er; // Unhandled stream error in pipe. ^ TypeError: Invalid non-string/buffer chunk at validChunk (_stream_writable.js:153:14) at WriteStream.Writable.write (_stream_writable.js:182:12) 所以显然我不能只写一个对象到这个stringifyObject 。 我不确定下一步是什么。 我需要将对象转换为缓冲区? 通过一些转换stream来运行对象,并将其传递给strinigfyObject
我试图将一些audiostream到我的服务器,然后将其stream式传输到用户指定的服务,用户将向我提供someHostName ,有时可能不支持该types的请求。 我的问题是,当发生clientRequest.on('end',..)永远不会被解雇的时候,我想这是因为它被传递给someHostReq ,当someHostName是“错误”的时候会被搞砸。 我的问题是: 有没有反正我仍然可以有clientRequest.on('end',..)甚至当streamclientRequestpipe道发生了什么问题呢? 如果不是的话:我该如何检测someHostReq “马上”发生了什么错误? someHostReq.on('error')不会启动,除非一段时间。 码: someHostName = 'somexample.com' function checkIfPaused(request){//every 1 second check .isPaused console.log(request.isPaused()+'>>>>'); setTimeout(function(){checkIfPaused(request)},1000); } router.post('/', function (clientRequest, clientResponse) { clientRequest.on('data', function (chunk) { console.log('pushing data'); }); clientRequest.on('end', function () {//when done streaming audio console.log('im at the end'); }); //end clientRequest.on('end',) options = { hostname: someHostName, method: 'POST', […]
我有stream,我需要将stream内容转换为string。 我使用http.get从Internetstream式传输。 我也写stream到文件,但我不想写文件,然后打开同一个文件,并从它读取…所以我需要转换成string的stream感谢所有的build议…
我正在从fs.createReadStream()返回的文件stream中读取数据,并将其pipe道化为使用zlib.createGzip()创build的gzipstream,然后将gzipstreampipe道化为HTTP响应。 我不知道如何处理这些stream上的“错误”事件。 我只是想确保所有的stream被closures,错误被logging下来,没有资源泄漏(注意文件streamautoClose设置为true)。 例如,如果在fs读取stream上发生错误,那么将如何影响gzipstream和响应stream? 这个“错误”事件会自动传播还是只是未处理和崩溃我的应用程序? 我应该听每个stream的“错误”事件,还是只听最后一个stream? 如果我听到fsstream的“错误”,会发生什么情况 – gzipstream是否仍然检测到发生了错误?
我正试图了解如何有效地开发dockerized应用程序,特别是Kubernetes。 我正在努力寻找正确的方式去实时编辑容器。 在过去的Docker中,我只是使用类似于Nodemon的东西来监视文件在本地更改,然后当我完成应用程序时,我将dockerize并部署。 对于Kubernetes(minikube),我的第一印象是我应该在每次编辑时重build容器。 当然,这不可能是人们在这里发展的方式 – 我错过了什么? 我应该在本地进行编辑,然后dockerize-> k8s部署? 那看起来不错。 我正在寻找一种方法,将所有本地更改同步到一个docker容器,然后重新启动kubernetes pod以进行新的更改,以便在开发期间从日志中读取数据。 如果这很奇怪,请推荐我一个更好的方法。 谢谢
解决以下控制stream程的最佳方法是什么? 我只想调用getSomeOtherData如果someData等于某个值/通过一些条件testing 在这两种情况下,我总是想调用getMoreData http.createServer(function (req, res) { getSomeData(client, function(someData) { // Only call getSomeOtherData if someData passes some conditional test getSomeOtherData(client, function(someOtherData) { // Always call getMoreData getMoreData(client, function(moreData) { res.end(); }); }); }); });
我需要捕获一个自定义的stream产生的subprocess的输出。 child_process.spawn(command[, args][, options]) 例如, var s = fs.createWriteStream('/tmp/test.txt'); child_process.spawn('ifconfig', [], {stdio: [null, s, null]}) 现在我该如何从/tmp/test.txt中实时读取? 它看起来像child_process.spawn没有使用stream.Writable.prototype.write和stream.Writable.prototype._write它的执行。 例如, s.write = function() { console.log("this will never get printed"); }; 以及, s.__proto__._write = function() { console.log("this will never get printed"); }; 它看起来像使用文件描述符来将child_process.spawn写入文件。 这样做不起作用: var s2 = fs.createReadStream('/tmp/test.txt'); s2.on("data", function() { console.log("this will never get printed either"); }); […]
根据我在这里所理解的,“V8有一个世代垃圾收集器,随机移动对象,节点不能得到一个指向原始string数据的指针来写入套接字。 所以我不应该将来自TCPstream的数据存储在string中,特别是如果该string变得比Math.pow(2,16)字节更大。 (希望我到现在为止..) 那么什么是处理来自TCP套接字的所有数据的最佳方式? 到目前为止,我一直试图使用_:_:_作为分隔符,因为我认为它是某种独特的,不会混淆其他的东西。 数据的一个样本将会是something_:_:_maybe a large text_:_:_ maybe tons of lines_:_:_more and more data 这是我试图做的: net = require('net'); var server = net.createServer(function (socket) { socket.on('connect',function() { console.log('someone connected'); buf = new Buffer(Math.pow(2,16)); //new buffer with size 2^16 socket.on('data',function(data) { if (data.toString().search('_:_:_') === -1) { // If there's no separator in the data that […]
在玩节点stream的时候,我注意到几乎所有的教程都教了一些东西: // Get Google's home page. require('http').get("http://www.google.com/", function(response) { // The callback provides the response readable stream. // Then, we open our output text stream. var outStream = require('fs').createWriteStream("out.txt"); // Pipe the input to the output, which writes the file. response.pipe(outStream); }); 但在我看来,这是一个非常危险的代码。 如果文件stream引发exception某个点会发生什么? 我认为文件stream可能会泄漏内存,因为根据文档,文件stream显然不接近。 我应该在乎吗? 在我的选项node.jsstream应该处理情况…
我正在开发一个使用Node.js的多进程应用程序。 在这个应用程序中,父进程会产生一个subprocess,并通过pipe道使用基于JSON的消息传递协议与其进行通信。 我发现大的JSON消息可能会被“截断”,使得发送到pipe道上的数据侦听器的单个“块”不包含完整的JSON消息。 此外,小JSON消息可能被分组在同一块中。 每个JSON消息将由一个换行符分隔,所以我想知道是否已经有一个实用程序将缓冲pipe道读取stream,使它一次发出一行(因此,对于我的应用程序,一个JSON文档一次)。 这似乎是一个很常见的用例,所以我想知道是否已经完成。 我会很感激任何人可以提供的指导。 谢谢。