NodeJS / Express / Angular:$ http.get返回状态300:多项选择(没有正文数据)

时间:2015-10-12 11:42:09

标签: javascript angularjs node.js express http-status-codes

我100%难以接受这个,甚至不知道从哪里开始寻找,所以如果我需要在任何地方添加任何细节,请告诉我。

我将从主要内容开始:我无法在我的localhost上重现这一点;它只发生在我的实时服务器上(运行Linux并通过HTTPS服务的VPS)。

我使用这条路线设置了ExpressJS:

 app.get('/api/checkScraper2/:id', api.checkScraper2);

这是为了这个:

exports.checkScraper2 = function(req, res) {
    var id = req.params.id;
    console.log("Checking for " + id)
    // More stuff, but nothing is being logged at all + response is already 300 before we get here
}

在AngularJS中,我的$http.get电话是:

function nextScrape() {
    $http.get('/api/checkScraper2/' + userId).then(function(obj) {

        var msg = JSON.parse(obj.data);

        console.log("Got some data !")
        console.log(msg);

    }, function(err) {
        console.log(err)
        $location.path('/setup');
    });

这会立即将我重定向到/setup,我在Express服务器日志中看不到对/api/checkScraper2/abc12345:id是一个字符串)的调用。转储的err不包含任何数据,只包含“300:多重选择”

似乎根本原因是Angular的$http模块,因为我的服务器没有发出任何300错误,也没有出现在我的后端日志中。

我可以使用$timeout进行一些操作来使函数正常工作:

var triedNext = 0; // This bit is a debugging attempt just in case the first 
function nextScrape() {
    $http.get('/api/checkScraper2/' + userId).then(function(obj) {
        var msg = JSON.parse(obj.data);
        console.log("Got some data !")
        console.log(msg);
    }, function(err) {
        console.log(err)
        triedNext++

        if(triedNext === 5){
            $location.path('/setup');
        }else{
            $timeout(nextScrape, 1500); // hack to wait 1.5s then try again
        }
    });

这很有效。关于可能导致这种情况的任何想法?

0 个答案:

没有答案