我正在尝试创建节点服务器以使用代理进行文件上传。
该服务器的主要作用是从客户端代理获取 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);
});
谁能帮我?