2015-06-25 52 views
0

我已經學會了三天的angularJS,但在學習期間我有一些問題。

好,在 「運行框」:

angular.module("techNodeApp",["ngRoute"]). 
run(function($window,$rootScope,$http,$location){ 
    $http({ 
     url:"/api/validate", 
     method:"GET" 
    }).success(function(user){ 
     console.log("success");   
     $rootScope.me=user; 
     $location.path("/"); 
    }).error(function(data){ 
     console.log("error"); 
     $location.path("/login"); 
    }); 

    $rootScope.logout=function(){ 
     $http({ 
     url:"/api/logout", 
     method:"GET" 
    }).success(function(){ 
     console.log("I've logged out"); 
     $rootScope.me=null; 
     $location.path("/login"); 
    }) 
    } 
}) 

在服務器(Node.js的):

app.get("/api/validate",function(req,res){ 
    console.log("I can hear you FE");  
}); 

app.get("/ajax/validate",function(req,res){ 
    var _userId=req.session._userId; 
    if(_userId){ 
     Controllers.findUserById(_userId,function(err,user){ 
      if(err){ 
       res.json(401,{msg:err}); 
      }else{ 
       res.json(user); 
      } 
     }) 
    }else{ 
     res.json(401,null); 
    } 
}); 

第一個進入我的網站我還沒有登錄,所以我想,當應用程序開始運行。它必須去「http://localhost:3000/login」的頁面。但它去了「http://localhost:3000」,它不能打印cmd中的字符串「我能聽到你FE」。

回答

1

1)當請求/api/validate時,您的node.js應用程序未響應user。因此,在您的angular應用中,當該AJAX請求成功時,user將爲undefined

2)當該請求成功時,您將$location.path設置爲/。所以它顯然會去localhost:3000/而不是localhost:3000/api/validate

3)$http發出AJAX請求,它不改變瀏覽器的位置(瀏覽器加載的URL)。 $location.path這樣做。

4)目前,它實際上應該在node.js輸出顯示I can hear you FE,除非你有其他問題,您node.js配置,或者,除非你忘了你的引導程序angular(通常ng-app指令在你的HTML)。

+0

我只需編輯我的node.js代碼。當我到達'/ api/validate'頁面時,我認爲它必須進入'/ login'頁面。但它不起作用 –

+0

我想你對使用'$ http'所做的AJAX請求,'node.js'處理的請求路徑以及'$ location.path'很困惑。而不是試圖通過它來破解它的工作,試着瞭解它是如何工作的。 – mostruash