Angularjs 节点应用程序中的请求超时

Angularjs 节点应用程序中的请求超时,angularjs,node.js,mongodb,post,Angularjs,Node.js,Mongodb,Post,我向我的节点api发出的请求需要4分钟以上才能响应。当收到响应时。angular应用程序不接受响应。在firebug上,url变为红色 我怎样才能克服这个问题 api.route('/allsearch') .post(function(req,res){ var filters=req.body.everything; var filterid=req.body.filterId; var searchid=req.body.search

我向我的节点api发出的请求需要4分钟以上才能响应。当收到响应时。angular应用程序不接受响应。在firebug上,url变为红色

我怎样才能克服这个问题

api.route('/allsearch')
    .post(function(req,res){
        var filters=req.body.everything;
        var filterid=req.body.filterId;
        var searchid=req.body.searchid;
        var zipgroup=req.body.zipgroup;
        var myObject = new Array();


        function getData(docs,  filters, filterid, callback) {
            function loop(i) {
                searchingalgo(docs[i], filters, filterid,  function(pers){
                        myObject[i] = pers;
                        if (i < docs.length) {
                        loop(i + 1);
                        } else {
                            callback();
                        }
                    });
            };
            loop(0);
        };//closing get data() 

        Searchradius.findOne({"searchid" : searchid, user: req.decoded.id}).exec(function(err, docs) {


            // Array to hold async tasks
            var asyncTasks = [];

            // Loop through some items
            zipgroup.forEach(function(item){
              // We don't actually execute the async action here
              // We add a function containing it to an array of "tasks"
              asyncTasks.push(function(callback){
                // Call an async function, often a save() to DB
                console.log(item);
                searchingalgo(item, filters, filterid,  function(pers){
                        myObject[item] = pers;
                      // Async call is done, alert via callback
                  callback();
                });
              });
            });


            Async.parallel(asyncTasks, function(){
                //console.log(myObject);
                Searchradius.update({ _id: searchid }, { $set: { ucounteds: myObject , uzips: zipgroup }}, function(err, result){
                    if(err) {
                        res.send(err);
                        return;
                    }
                    var fields = ['city', 'state', 'zip','distance', 'count'];
                    var myresults = [];
                    var tc=0;
                    var newMyobj= new Array();
                    co=0;
                    zipgroup.forEach(function(item){
                        tc+=myObject[item];
                        //myresults.push(jobj);
                    });

                    for(i=0;i<zipgroup.length;i++){
                        newMyobj[i]=myObject[zipgroup[i]];
                    }
                    console.log(tc);

                    Searchfilter.update({ _id: filterid }, { $set: { counted_results: tc }}, function(err, resultupdate){
                        //console.log(resultupdate);
                        //console.log(tc);
                    });




                //  console.log(myObject);
                //  console.log(newMyobj);
                    res.json({ 
                    success: true,
                    zips: zipgroup,
                    states: docs.states,
                    cities: docs.cities,
                    distances: docs.distances,
                    counted_results : newMyobj,
                    });

                });     //update searchradius
            });         //getdata function 
        });             //searchradius findone
    });
需要澄清的是,收集的Consumer1有超过2900009876个文档。它已正确索引,并且查询所用时间尽可能短。但我仍然面临这个问题。 任何建议都会有帮助

这是我从angular controller发出的post请求

$http.post('/api/allsearch',
        {
            "everything":$scope.filterSearch ,
            "searchid":$routeParams.id, 
            "filterId": $scope.filterId, 
            "zipgroup" : $scope.zipgroup
        })
        .success(function(data){

            for(var i=0; i<data.zips.length;i++){
                oneset={
                    "zip": data.zips[i],
                    "state": data.states[i],
                    "city": data.cities[i],
                    "distance": data.distances[i],
                    "count": data.counted_results[i]
                };
                $scope.totalCount+=data.counted_results[i];
                $scope.results.push(oneset);
            }
            angular.forEach($scope.results, function (result) {
                    result.distance = parseFloat(result.distance);
                });
            $rootScope.processing=false;
            $scope.filterlinkdisplay=true;
    }); 
$http.post(“/api/allsearch”,
{
“一切”:$scope.filterSearch,
“searchid”:$routeParams.id,
“filterId”:$scope.filterId,
“zipgroup”:$scope.zipgroup
})
.成功(功能(数据){

对于(var i=0;i至少有几个选项:

  • 设置大约10分钟,以便AngularJS请求不会超时,等待4分钟获取数据
  • 轮询:1)AngularJS应用程序执行初始请求2)Node.js服务器为此请求向AngularJS应用程序发出一个唯一令牌,并开始收集数据3)AngularJS应用程序等待几分钟,并使用以前收到的令牌执行请求以获取数据4)如果结果已准备就绪,则完成。如果未准备就绪,请再次等待,然后从AngularJS执行另一个请求
  • 。在客户端,它受许多浏览器支持,在服务器端使用。它是一种双向协议,因此服务器可以在数据准备就绪时通知客户端

  • @Satyam在获得任何帮助之前,您需要添加更多详细信息,如错误消息、您的代码等。如果需要任何其他输入,请告诉我。您的意思是Node.js请求处理时间过长,AngularJS等待响应超时?您是否希望在ngularJS?我想在Amgular中正确处理节目处理JS@SatyamSaxena第一个选项是轮询:1)AngularJS应用程序执行初始请求2)Node.js服务器为此请求发出唯一令牌,并开始收集数据3)AngularJS应用程序等待几分钟,并使用以前收到的令牌执行请求以获取数据4)如果ult准备好了,您就完成了。如果没有,请再次等待,然后从AngularJS发出另一个请求。第二个选项是使用Websocket。这是一个双向协议,所以服务器可以在数据准备好时通知客户端。第三个选项是将AngularJS$http超时设置为10分钟左右,这样AngularJS就不会超时,等待4分钟。谢谢您的回答…如何c我实现AngularJS$http超时10分钟???$http.post('/api/allsearch',{“everything”:$scope.filterSearch,“searchid”:$routeParams.id,“filterId”:$scope.filterId,“zipgroup”:$scope.zipgroup})。成功(函数(数据){angular.forEach($scope.results,函数(result)){result.distance=parseFloat(result.distance);};$rootScope.processing=false;$scope.filterlinkdisplay=true;});我添加了来自角度控制器的POST请求。请建议如何在其中设置10分钟的超时。
    $http.POST('/api/allsearch',{“一切”:$scope.filterSearch,“searchid”:$routeParams.id,“filterId”:$scope.filterId,“zipgroup”:$scope.zipgroup},{timeout:600000})
    。最后一个参数是配置对象,它可以有超时,以毫秒为单位指定。请在这里帮助我
    $http.post('/api/allsearch',
            {
                "everything":$scope.filterSearch ,
                "searchid":$routeParams.id, 
                "filterId": $scope.filterId, 
                "zipgroup" : $scope.zipgroup
            })
            .success(function(data){
    
                for(var i=0; i<data.zips.length;i++){
                    oneset={
                        "zip": data.zips[i],
                        "state": data.states[i],
                        "city": data.cities[i],
                        "distance": data.distances[i],
                        "count": data.counted_results[i]
                    };
                    $scope.totalCount+=data.counted_results[i];
                    $scope.results.push(oneset);
                }
                angular.forEach($scope.results, function (result) {
                        result.distance = parseFloat(result.distance);
                    });
                $rootScope.processing=false;
                $scope.filterlinkdisplay=true;
        });