对你们中的一些人来说很容易的问题 我有一个API端点,返回一个HTTP响应与内容types设置为一个图像types – 图像/ JPEG,图像/ PNG等,如果没有图像的人与我正在发送的ID。 如果404,我想只发送文件系统中的no文件png。 我一直在尝试使用请求和pipe道,我没有find一个相似的例子。 人们总是从一个文件stream。 如果这个工作本身: app.get('/api/customers/:id/image', function (req, res) { request.get(util.format(config.apis.getImage, req.params.id)).pipe(res); //res.sendfile(path.join(__dirname, '/static/img/user.png')); }); 它确实将图像返回给浏览器,但引发exception: stream.js:94 throw er; // Unhandled stream error in pipe. Error: Parse Error at Socket.socketOnData(http.js:1556:20) … 无论哪种方式,我想检查的情况下,请求调用的情况下,404案件。 我想我只是太新而不能stream。 任何帮助? 谢谢!
我正在尝试在node.js中播放一些mp3文件。 事情是,我设法一个接一个地播放,甚至像我想要的那样平行播放。 但是我也想要的是能够控制振幅(增益),最终能够创build一个交叉淡入淡出。 任何人都可以帮我理解我需要做什么? (我想在node-webkit中使用它,所以我需要一个基于node.js的解决scheme,没有外部依赖)。 这是我到目前为止: var lame = require('lame'), Speaker = require('speaker'), fs = require('fs'); var audioOptions = {channels: 2, bitDepth: 16, sampleRate: 44100}; var decoder = lame.Decoder(); var stream = fs.createReadStream("music/ge.mp3", audioOptions).pipe(decoder).on("format", function (format) { this.pipe(new Speaker(format)) }).on("data", function (data) { console.log(data) })
我想pipe一些stream数据到feedgnuplot为了实时绘制它 以下工作: // index.js readableStream.pipe(process.stdout) // in bash $ node index.js | feedgnuplot –stream 但是下面的行不通(这就是我想要做的): // index.js var feedgnuplot = require('child_process').spawn('feedgnuplot', ['–stream']) readableStream.pipe(feedgnuplot.stdin) //in bash $ node index.js 我收到ECONNRESET错误 编辑:请求可读stream的示例: var util = require('util') var Readable = require('stream').Readable util.inherits(SomeReadableStream, Readable) function SomeReadableStream () { Readable.call(this) } SomeReadableStream.prototype._read = function () { this.push(Math.random().toString()+'\n') } var someReadableStream […]
我想将.mp3文件从客户端stream式传输到服务器,都使用NodeJS。 我正在使用binaryjs来传输文件。 客户: var BinaryClient = require('binaryjs').BinaryClient; var fs = require('fs'); var client = BinaryClient('ws://localhost:9000'); client.on('open', function(stream){ client.send(fs.createReadStream('music.mp3'), { name : 'music' }); }); 服务器: var BinaryServer = require('binaryjs').BinaryServer; var server = BinaryServer({port: 9000}); server.on('connection', function(client){ client.on('stream', function(stream, meta){ var data = []; stream.on('data', function(chunk){ console.log('Recieve Chunk: ' + data.length); data.push(chunk); }); stream.on('end', function() { […]
我有一个用Node.js写的TCP服务器。 当在其服务器套接字上收到一个套接字时,该进程将套接字传递给进程池。 它要么分叉,要么重用先前分叉的过程。 然后使用ChildProcess.send()将接收到的套接字传递给其他进程。 这完全控制了对subprocess的套接字。 我正在考虑采取不同的方法,但我担心潜在的性能权衡。 我想反而通过标准input或者unix域套接字或者pipe道将套接字传递给subprocess。 为什么这种方法在我的特定领域更可取,有很多原因,但我不会用这些细节来解决这个问题。 所以我只想知道Node.jsstream上pipe()方法的性能特点。 是否在系统级别处理stream的pipe道,或者Node.js是否必须从一个stream中读取每个字节并将其发送到目标? 有几个系统调用(即splice())提供一些文件描述符的零拷贝stream。 Node.js是否使用某种类似的机制,或者是手动的?
我正在研究使用Web Audio APIlogging麦克风数据并将其保存到磁盘的nodewebkit应用程序。 我已经使用了RecordRTC框架,但是它并没有公开将数据stream式传输到磁盘的方法(logging可能超过一个小时,这是必要的)。 我似乎无法find使用其他方法将数据stream式传输到磁盘的好方法。 如果有一个合适的方法来做到这一点,我将不胜感激这个工作的适当工具是什么。 然而,我现在的非工作解决scheme是: 使用WebAudio API创build一个ScriptProcessorNode来访问PCM数据 创build一个可读的stream缓冲区(使用stream缓冲区模块)并将其传送到一个fileWriter(由wav模块制作) 将onaudioprocess事件中的数据转换为16位整数,并将它们添加到可读stream中,以便可以将其写入 这是行不通的,因为ReadableStreamBuffer一次仅传送20个字节到fileWriter,而不是由于某种原因排队来自麦克风的所有字节。 var wav = require('wav'); var streamBuffers = require("stream-buffers"); function convertFloat32ToInt16(buffer) { var l = buffer.length; var buf = new Int16Array(l); while (l–) { buf[l] = Math.min(1, buffer[l])*0x7FFF; } return buf.buffer; } var filePath = utils.getCwd() + '/recordings/demo.wav'; var fileWriter = new wav.FileWriter( filePath, […]
我正在为stream式应用程序创build一个中继服务器。 基本上,它应该像这样工作: 客户端A通过套接字将麦克风audio传输到服务器 服务器获取stream,也许暂时存储在某个地方?(不知道) 客户端B从服务器获取stream并播放它。 基本上,我完成了第一部分(发送麦克风audio到服务器): while(isStreaming) { minBufSize = recorder.read(buffer, 0, buffer.length); mSocket.emit("stream", Arrays.toString(buffer)); } 第三部分完成,只是播放audio: mediaplayer.reset(); mediaplayer.setDataSource("http://192.168.1.2:1337/stream"); mediaplayer.prepare(); mediaplayer.start(); 现在我不知道如何桥接传入的字节数组和stream。 这是我目前的服务器代码: var ms = require('mediaserver'); // from server to Client B exports.letsStream = function(req, res, next) { ms.pipe(req, res, "sample_song_music_file.mp3"); }; // from Client A to server exports.handleSocketConnection = function(socket) { console.log("connected"); socket.on('stream', […]
我在处理Express js应用程序中的错误时遇到了一些问题。 我的问题是,我正在pipe道stream响应,我不知道什么是最好的方法来处理可读stream中可能发生的错误。 我正在使用errorHandler中间件,在路由中间件后面configuration: … app.use(app.router); app.use(express.errorHandler()); … 这是我的路线: exports.folders = function(req, res, next) { //throw new Error("TEST ERROR"); var path = decodeURIComponent(req.params.path), foldersStream = wd.listFolders(path); foldersStream.on("error",function(err){ console.log("STREAM ERROR") console.dir(next.name) return next(err); }); res.setHeader("content-type", "application/json"); foldersStream.pipe(res); }; 如果我将TEST ERROR放在函数的主体中,则按照预期由express errorHandler处理。 无论如何,如果错误事件发生在stream中,错误事件处理程序会被调用,因为我可以在控制台中看到消息,但是errorHandler永远不会被调用。 如果我不处理错误事件,则整个节点进程崩溃。 如果我处理它,服务器向客户端发送一个500响应,但是errorHandler没有被调用,所以我错过了日志中的堆栈跟踪。 我做错了什么?
我想创build一个zip文件并上传它,而不用像这样写一个临时文件到磁盘: gulp.task( 'zip-upload', function() { return gulp.src( '**/*', { cwd: 'out/', cwdbase: true } ) .pipe( zip( 'file.zip' ) ) .pipe( request.put( 'https://myurl.com' ) ); }); 但是它会抛出一个错误: http.js:853 throw new TypeError('first argument must be a string or Buffer'); TypeError: first argument must be a string or Buffer at ClientRequest.OutgoingMessage.write (http.js:853:11) at Request.write (…/node_modules/request/request.js:1315:25) 我用两个任务解决了这个问题,但这并不理想: gulp.task( […]
我想限制在Express 4中的file upload。我的意思是每秒的字节数,而不是API调用的数量。 我希望能够模拟一个缓慢的file upload连接,所以我可以testing我的进度animation。 我只想限制file upload端点,而不是其他端点。 我怎样才能做到这一点? 理想情况下,我想在特定端点上添加一些中间件,并以字节/秒为单位指定传输速度。