上传文件时,Openshift NodeJS app上的Bad Gateway 502

时间:2014-11-18 12:19:07

标签: angularjs node.js response openshift gateway

我有一个基于NodeJS和AngularJS的应用程序并将其推送到openshift。但每当我尝试上传某些内容时,我都会收到以下错误:

POST http://www.domain.de/api/upload/file 502 (Bad Gateway) 

Angular会发送如下数据:

$scope.newFile = function() {
    $scope.id = $scope.group._id;
    var fd = new FormData();
    var file = $scope.files[0];
    fd.append('file', file);
    if (file.type!="application/pdf"){
        mvNotifier.error("Nur PDF Dateien sind akzeptiert.");
        return;
    }       
    $http.post('/api/upload/file', fd, {
        transformRequest: angular.identity,
        headers:{'Content-Type': undefined}
    })
    .success(function(d) {
        var data = {
            name: file.name,
            description: $scope.descriptionfile
        }
        mvNotifier.notify("Bis hier hin klappt alles");
        console.log("sucess on uploading ");

        mvFactory.POST(data, mvGroup, {_place:"file", _id:$scope.id}).then(function(data) {
            $scope.newfile=false;
            $scope.group.files.push({name:file.name, description:$scope.descriptionfile});
            mvNotifier.notify("Datei hochgeladen");
        }, function(reason) {
            mvNotifier.error("reason");
        })
    })
    .error(function(data,status,header) {
        mvNotifier.error("Upload hat nicht funktioniert.")
        console.log("data", data);
        console.log("status", status);
        console.log("header", header);
    })

服务器使用busboy路由到文件以保存它:

uploadFile: function(req,res) {
    console.log("req",req.files);
    if (process.env.OPENSHIFT_DATA_DIR!= undefined) {
        var cPath = process.env.OPENSHIFT_DATA_DIR;
    } else {
        var cPath = path.resolve('..', 'data');
    }
    var busboy = new Busboy({ headers: req.headers });
    req.pipe(busboy);
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
        var wPath = cPath + '/uploads/documents';
        file.pipe(fs.createWriteStream(wPath + '/' + filename));

        file.on('end', function() {
            console.log('File [' + fieldname + '] Finished');
        });
    });
    busboy.on('finish', function() {
        console.log('Done parsing form!');
    });
    res.status(200).end();

}

在Localhost上,一切正常,数据保存到服务器。但我得到了坏网关和这个标题的响应:

<title>502 Bad Gateway</title>
</head><body>
<h1>Bad Gateway</h1>
<p>The proxy server received an invalid response from an upstream server.<br />

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。我发布它,以便有问题的人可以解决它。

openshift中的Web负载均衡器是HAproxy并且存在上载问题,因为由于内容类型,服务器的响应与请求不一致。我从$ http从角度切换到XHR。这解决了问题并且运行正常。内容类型我根本没有设置。现在它工作正常。