2

我想将一个 blob 数据从 JA 客户端发送到 NodeJS 服务器。

现在我有这个客户端代码: [...] recorder.exportWAV(function(blob) { audioObj = blob; });

var formData = new FormData();
formData.append("operation", "addMessage");
formData.append("msg", audioObj);

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:8080/sendRecord", true);
xhr.onreadystatechange = function(){
    if(xhr.readyState==4 && xhr.status==200){
        // get response from server
    }
}
xhr.send(formData);

我使用一些 JS 库从集成麦克风录制音频,最后我有一个音频对象,它是一个 blob 对象。

我想调整这个 si node.js 服务器以接收数据。

var http = require('http'),
    url = require('url');

var app = http.createServer(function(request, response){

    var path = url.parse(request.url).pathname;
    // check the url path
    if (path == "/sendRecord") {

        // check the request method
        if(request.method != "POST"){
            // return error
        }

        // _______________________________
        //| here I want catching XHR data |
        // –––––––––––––––––––––––––––––––
    }
}).listen(8080);

console.log("Server running on: http://localhost:8080/");

我认为应该是一些用于响应客户端 XHR 请求的服务器端 XHR API,但我不知道在哪里可以找到它们。有人可以帮我吗?还带有链接或文档... ;)

谢谢!

4

1 回答 1

3

我回答自己......如果有人在未来发现有用;)

使用 Formidable ( https://github.com/felixge/node-formidable ) 我已经这样做了:

var http = require('http'),
  url = require('url'),
  formidable = require('formidable')
  util = require('util');

var server = http.createServer().listen(8080);

server.on('request', function(request, response) {
  var form = new formidable.IncomingForm(),
    fields = [],
    files = [];

  form.on('error', function(err){
    response.writeHead(200, {'content-type': 'text/plain'});
    response.end('error:\n\n' + util.inspect(err));
  });

  form.on('field', function(field, value){
    console.log(field, value);
    fields.push([field, value]);
  });

  form.on('file', function(field, file){
    console.log(field, file);
    files.push([field, file]);
  });

  form.on('end', function(){
    console.log('-> upload done');
    response.writeHead(200, {'content-type': 'text/plain'});
    response.write('Received fields:\n\n ' + util.inspect(fields));
    response.write('\n\n');
    response.end('received files:\n\n ' + util.inspect(files));
  });

  form.encoding = 'utf-8';
  form.uploadDir = './tmp';
  form.keepExtensions = true;
  form.parse(request);
});

感谢 robertklep 的建议!

于 2013-11-12T13:50:29.107 回答