我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
}
});
这很有效。关于可能导致这种情况的任何想法?