2014-09-21 84 views
0

這裏是我的HTML表單如何檢索NODE JS從POST數據

<form class="navbar-form navbar-right" ng-submit="loginuser()"> 
        <input type="email" ng-model="user.username" placeholder="Email" class="form-control" required> 
        <input type="password" ng-model="user.password" placeholder="Password" class="form-control" required> 
        <button class="btn btn-success" type="submit">Login</button> 
</form> 

和我app.js是

function navbarformcontroller($scope,$http){ 
    $scope.user = {}; 

    $scope.loginuser = function(){ 
     console.log('entered'); 
     $http({ 
      method : 'POST' , 
      url : 'http://localhost:3000/login', 
      data : $scope.user 
     }) 
      .success(function(data){ 
       alert(data); 
      }) 
      .error(function(data, status){ 
       alert(data + " " + status + 'x'); 
      }) 
    }; 
} 

,並在我的服務器端是節點JS是

router.get('/', function(req, res) { 
    req.render('login',{username : req.username, password : req.password}); 
    res.send('success'); 
    log(username + " " + password); 
}); 

和錯誤詳細信息在客戶端控制檯中是

XMLHttpRequest無法加載http://localhost:3000/login。請求的資源上沒有「Access-Control-Allow-Origin」標題。因此'Origin'http://localhost:63342'不允許訪問。

+0

不要在兩個不同的端口上運行你的應用程序,或者你成爲[SOP]的受害者(https://en.wikipedia.org/wiki/Same-origin_policy)... – Bergi 2014-09-21 16:03:21

回答

0

您的瀏覽器限制訪問不同的域名。您正在使用本地主機,但不同的端口,這就是爲什麼你的域名變得不同。

這裏的最佳解決方案是運行服務器並使用相同的端口請求訪問。既然你運行在端口63342的的NodeJS服務器,您需要與域訪問/登錄頁面

http://localhost:63342 

更妙的是,因爲域名是你能避免加入域並請求爲

function navbarformcontroller($scope,$http){ 
    $scope.user = {}; 

    $scope.loginuser = function(){ 
     console.log('entered'); 
     $http({ 
      method : 'POST' , 
      url : '/login', 
      data : $scope.user 
     }) 
      .success(function(data){ 
       alert(data); 
      }) 
      .error(function(data, status){ 
       alert(data + " " + status + 'x'); 
      }) 
    }; 
} 
相同
+0

其實我創建了兩個項目一個用於客戶端,另一個用於服務器端,這就是端口號不同的原因。有沒有什麼辦法,如何創建作爲同一個項目的HTML 5和NODEJS的結合項目,以便我可以在相同的端口號上運行?該項目已在** Webstorm ** – 2014-09-21 16:53:31

+0

中創建,您始終可以這麼做......無需有兩個單獨的文件夾....在nodejs中有一個公用文件夾,您可以在其中擁有所有客戶端文件和nodejs服務器可以將這些文件提供給最終用戶......這些視圖可以使用任何模板語言...... – V31 2014-09-21 17:14:14

+0

@NANDIGAMVIJAYSAI:它是否解決你的目的? – V31 2014-09-25 05:19:40

0

這裏有幾個問題:

  • 好像你可能沒有使用身體解析中間件。如果你不處理文件,你可以在npm上使用body-parser模塊。如果您需要multipart/form-data(文件)支持,則可以在body-parser的自述文件中找到可處理這些類型請求的模塊的鏈接。

  • 您正嘗試同時向客戶端呈現模板字符串「success」。另外,對於模板渲染而言,它不是。

  • 您正在嘗試一個跨源請求。雖然主機名可能相同,但端口不同,並且也構成了一個跨源請求。因此,在Express中處理CORS的最簡單方法之一是在npm上使用中間件,例如cors。如果您需要發送cookie,自定義標題等,請在$http配置對象中設置withCredentials: true