我正在使用express来build立nodeJS中的videostream服务器,并使用“request-progress”模块来获取进度状态。 这是(videostream)正常工作。 但问题是,即使我closures浏览器或移动到下一页后,服务器仍然stream数据。 我可以在控制台中看到。 这里是相同的代码: app.route('/media/*').get(function (req, res) { var originalUrl = "http://myactualserver.com"; var resourceUrl = originalUrl.split('media'); var requestURL = BASE_URL + resourceUrl[1]; req.on('close', function () { console.log('Client closed the connection'); }); var options = {}; progress(request(requestURL), { throttle: 1000, delay: 0, lengthHeader: 'content-length', }) .on('progress', function (state) { console.log('progress', state); }) .on('error', function (err) […]
我只是开始使用mongodbstreamfunction来直接stream数据到快速响应 。 为此,我使用在这个问题上find的一段代码: cursor.stream().pipe(JSONStream.stringify()).pipe(res); 当游标返回MongoError时,我想用500状态标记响应。 不幸的是,在这个代码中,错误以200状态返回到JSON中。 我怎样才能使用简单的解决scheme来处理? 我是否必须在光标的错误事件中处理? 如果是这样,如果发生错误,我怎么能告诉不要直接stream式expression回应? 编辑 我已经尝试了一个解决scheme,像这样处理stream中的错误事件: var stream = cursor.stream(); stream.on('error', function(err){ res.status(500).send(err.message); }); stream.pipe(JSONStream.stringify()).pipe(res); 不幸的是,当发生错误时,我得到了一个Error: write after end从快速Error: write after end因为我已经在错误事件中发送了响应。 当光标stream失败后,如何将标记为错误状态的响应?
这两个操作之间的基本区别是什么? someReadStream.pipe(fs.createWriteStream('foo.png')); VS someReadStream.on('data', function(chunk) { blob += chunk } ); someReadStream.on('end', function() { fs.writeFile('foo.png', blob) }); 当使用请求库进行抓取时,我只能使用前一种方法保存图片(png,bmp)等,而后者则有相同的gibbersh(二进制)数据,但图像不会呈现。 他们有什么不同?
我需要从客户端(nodejs命令行)和服务器(express nodejs)stream式传输文件。 这是客户端: var request = require('request'); var fs = require('fs'); // … var readStream = fs.createReadStream(file.path); readStream.on('end', function() { that.emit('finished'); }); readStream.pipe(request.post(target)); // … 这是服务器端: var fs = require('fs'); var path = require('path'); // … app.post('/:filename', function(req, res) { req.setEncoding('binary'); var filename = path.basename(req.params.filename); filename = path.resolve(destinationDir, filename); var dst = fs.createWriteStream(filename); req.pipe(dst); req.on('end', […]
给定一个Readablestream(可能是process.stdin或者一个文件stream),将pipe()传递给一个自定义的Writablestream是可能的/实际的,这将会填充一个孩子Writable直到一定的大小。 然后closures那个子stream; 打开一个新的Writablestream并继续? (上下文是将大量数据从stream水线上传到CDN,并将其分成合理大小的块,而不必先将数据写入磁盘。) 我试过创build一个Writable来处理_write函数中的子stream的打开和closures,但是当传入的块太大而不能适应现有的子stream时,问题就来了:它必须写一些块到旧溪stream 创build新的stream; 然后在完成_write调用之前等待新stream上的open事件。 我想的另一个想法是创build一个额外的Duplex或Transformstream来缓冲pipe道,并确保进入Writable的块肯定等于或小于现有子stream可接受的数量,以给Writable时间改变孩子stream了过来。 或者,这是否过度复杂,有一个更简单的方法来完成原来的任务?
我尝试在Mac OS中使用Nodejs fs.read方法。 然而,它不工作..我使用下面的源代码 var fs = require('fs'); fs.open('helloworld.txt', 'r', function(err, fd) { fs.fstat(fd, function(err, stats) { var bufferSize=stats.size , chunkSize=512, buffer=new Buffer(bufferSize), bytesRead = 0; while (bytesRead < bufferSize) { if ((bytesRead + chunkSize) > bufferSize) { chunkSize = (bufferSize – bytesRead); } fs.read(fd, buffer, bytesRead, chunkSize, bytesRead, testCallback); bytesRead += chunkSize; } console.log(buffer.toString('utf8')); […]
我目前正在逐行处理一个文件stream,通过运行它发送'line'事件的变换stream。 我希望能够在发现当前行符合某些标准时暂停input文件stream,开始处理新的stream,并且在完成时,逐行恢复处理原始stream。 我把它简化为下面的一个简单例子: test.coffee: fs = require 'fs' TestTransform = require './test-transform' inStream = new TestTransform fs.createReadStream("./test.coffee").pipe(inStream) inStream.on 'line', (line) -> process.stdout.write "–>" if line.match /line\.match/g process.stdout.write line console.error "PAUSE" inStream.pause() fs.createReadStream("./test.coffee").pipe(process.stdout).on 'end', -> console.error "UNPAUSE" inStream.resume() else process.stdout.write line test-transform.coffee: Transform = require('stream').Transform module.exports = class TestTransform extends Transform constructor: -> Transform.call @, readableObjectMode: […]
在Node.js中,假设我想从某个地方读取一个文件并传输响应(例如,使用fs.createReadStream()从文件系统中)。 application.get('/files/:id', function (request, response) { var readStream = fs.createReadStream('/saved-files/' + request.params.id); var mimeType = getMimeTypeSomehow(request.params.id); if (mimeType === 'application/pdf') { response.set('Content-Range', …); response.status(206); } else { response.status(200); } readStream.pipe(response); }); 但是,我想在发送我的响应头之前检测stream是否有错误。 我怎么做? 伪代码: application.get('/files/:id', function (request, response) { var readStream = fs.createReadStream('/saved-files/' + request.params.id); readStream.on('ready', function () { var mimeType = getMimeTypeSomehow(request.params.id); if (mimeType […]
任何人都可以请解释给我们(只是我?)如何在Nodejs中使用stream? 这是后续的: 在Nodejs中使用zlib压缩和解压缩数据 我的主要兴趣是处理文件,但也string(即Stream.toString()和String.toStream()…不是真正的function…) 谢谢!
我有以下服务器: http.createServer(function (req, res) { fs.mkdir(__dirname + '/output', function (err) { req.pipe(fs.createWriteStream(__dirname + '/output/file.txt')); res.end(); }); }).listen(3000); 然后,我使用请求将stream传输到服务器。 var fs = require('fs'); var request = require('request'); var crs = fs.createReadStream(__dirname + '/file.txt'); var r = request.post('http://0.0.0.0:3000'); crs.pipe(r); 有时它可以工作,但大部分时间/output/file.txt是空的。 当我将req.pipe(…)移到mkdircallback之外时,它每次都有效。 有谁能解释为什么会发生?