在节点应用程序中请求超时

我对我的节点api的请求需要超过4分钟的时间来回应。 收到回复的时间。 angular度的应用程序不接受回应。 在萤火虫上,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 }); 

根据要求,这是我的节点API。 zipgroup是一个类似于拉链的数组

 [37663, 37664, 37669, 37671, 37660, 37669, 37667, 37668, 37666, 37665, 37662, 37661] 

只是要清楚收集Consumer1s有超过2900009876文件。 它的索引是正确的,查询所花的时间最less。 但我仍然面临这个问题。 任何的意见都将会有帮助。

这是我angular度控制器的发布请求。

 $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; }); 

至less有几个选项:

  1. 设置AngularJS $ http超时 10分钟左右,以便AngularJS请求不超时,等待4分钟获取数据
  2. 轮询 :1)AngularJS应用程序做初始请求2)Node.js服务器向AngularJS应用程序发出一个唯一的令牌,并开始收集数据3)AngularJS应用程序等待几分钟,然后用先前收到的令牌来获取数据4)如果结果准备就绪,就完成了。 如果不是的话,再等一等,再从AngularJS上请求
  3. 使用WebSocket 。 在客户端,它被许多浏览器支持,在服务器端使用ws 。 这是一个双向协议,所以服务器可以在数据准备好的时候通知客户端。