我正在尝试创建节点服务器以使用代理进行文件上传。
该服务器的主要作用是从客户端代理获取 HTTP PUT 请求到 OpenStack Swift 服务器。
源代码如下所示:
var https = require('https')
   // ... some modules are required
   , Swift = reuiqre('swift')
   , mysql = require('mysql');
// some configurations
function request(options, callback, pipe){
  var client = https.request(options, function(res){
    res.on('end', function(err){
      // something to do
    });
  });
  pipe.req.on('data', function(chunk){
    client.write(buffer);
  });
  pipe.req.on('end', function(err){
    client.end();
    callback(null, res);
  });
}
app.put('/upload', function(req, res, next){
  var swift = new Swift(swiftConfig, function(err, result) {
    var options = some logics for options here;
    db.query('SELECT * FROM SOMETABLE WHERE SOMETHING = ?'
          , [something]
          , function (err, results) {
              if (err) return next(err);
              request.call(swift, options, function(err, result) {
                if(err) { res.send(500, err) };
                res.end();
              }, {req: req});
    });
  });
}
当我从客户端 PC 放置文件时,上面的代码运行良好。
但是,当我上传(即 HTTP PUT)内容长度为零(0)的文件时,就会出现问题。
即使要上传的文件大小为 1KB,也可以正常工作。
但是当我尝试上传 0 字节文件(空的 http 正文)时,从未调用过的 'end' 事件(下面的代码),最后请求发出“错误:套接字挂起”的错误。
  pipe.req.on('end', function(err){
    client.end();
    callback(null, res);
  });
谁能帮我?