ファイルのアップロードにプロキシを使用するためのノード サーバーを作成しようとしています。
このサーバーの主な役割は、クライアント エンド プロキシから OpenStack Swift サーバーに HTTP PUT 要求を取得することです。
ソースコードは次のようになります。
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 からファイルを PUT したときにうまく機能します。
ただし、 content-length がzero(0)のファイルをアップロード(HTTP PUT)すると問題が発生します。
アップロードするファイルのサイズが 1KB の場合でも、問題なく動作します。
しかし、0 バイトのファイル (空の http 本文) をアップロードしようとすると、「終了」イベント (以下のコード) が呼び出されず、最終的に要求は「エラー: ソケットがハングアップしました」というエラーを出力します。
pipe.req.on('end', function(err){
client.end();
callback(null, res);
});
誰でも私を助けることができますか?