2017-06-21 28 views
0

介紹通功能的前端從後端節點角

我需要驗證,如果電子郵件地址是API中,如果是允許用戶輸入部分的人,如果着他們不一個用戶。

我已經構建了後端節點代碼來驗證這一點。

我有3個函數建立在我的後端(node, express)

第一

從前端形式(Angular)交獲取數據,然後使用promise使提供給第三功能的值。

第二

此功能驗證,並得到我的API密鑰,並使用承諾使提供給第三功能這一功能。

第三

該函數從第二個使用從第一(電子郵件地址)的數據和API密鑰,並張貼到API端點,如果電子郵件出現在你通過API,如果沒有失敗。

過程

用戶輸入一個電子郵件上的前端角,打login然後此電子郵件被傳遞到三個後端功能,則它會通過或第三功能失敗。

如果通過,我希望將$scope.EmailTrue= true;傳遞給我的Angular控制器,這樣我可以在我的前端上按ng-hideng-show按鈕。

我想也許是一個簡單的帖子到我的前端,但我是新的角和節點,所以我不知道是否有不同的方式做到這一點。

節點後端(3個功能)

//---------------------------------- Grab the packages we need and set variables --------------------------------------- 
//---------------------------------------------------------------------------------------------------------------------- 
var express = require('express'); 
var request = require('request'); 
var nodePardot = require('node-pardot'); 
var bodyParser = require('body-parser'); 
var rp = require('request-promise'); 
var app = express(); 
var port = process.env.PORT || 8080; 

// Credential's for pardot API 
var password = 'password'; 
var userkey = 'userkey'; 
var emailAdmin = '[email protected]'; 

// Start the server 
app.listen(port); 
app.use(bodyParser.json()); // support json encoded bodies 
app.use(bodyParser.urlencoded({extended: true})); // support encoded bodies 
console.log('Test server started! At http://localhost:' + port); // Confirms server start 

//---------------------------------- Function to get front end form posted data LOGIN form ---------------------------------------- 
//---------------------------------------------------------------------------------------------------------------------- 
var firstFunction = function() { 
    return new Promise (function (resolve) { 
     setTimeout(function() { 
      app.post('/back-end/test', function (req, res) { 
       console.log(req.body); 
       var login = req.body.LoginEmail; 
       res.send(login); 
       resolve({ 
        data_login_email: login 
       }); 
      }); 
      console.error("First done"); 
     }, 2000); 
    }); 
}; 

//---------------------------------- Function to get API key from Pardot (AUTHENTICATION) ------------------------------ 
//---------------------------------------------------------------------------------------------------------------------- 
var secondFunction = function() { 
    return new Promise (function (resolve) { 
     setTimeout(function() { 
      nodePardot.PardotAPI({ 
       userKey: userkey, 
       email: emailAdmin, 
       password: password, 
       DEBUG: false 
      }, function (err, client) { 
       if (err) { 
        // Authentication failed 
        console.error("Authentication Failed", err); 
       } else { 
        // Authentication successful 
        var api_key = client.apiKey; 
        console.log("Authentication successful !", api_key); 
        resolve({data_api: api_key}); 
       } 
      }); 
      console.error("Second done"); 
     }, 2000); 
    }); 
}; 

//---------------------------------- Function to post data to Pardot --------------------------------------------------- 
// --------------------------------------------------------------------------------------------------------------------- 

function thirdFunction(result) { 
    return new Promise (function() { 
     setTimeout(function() { 
      var headers = { 
       'User-Agent': 'Super Agent/0.0.1', 
       'Content-Type': 'application/x-www-form-urlencoded' 
      }; 
// Configure the request 
      var api = result[1].data_api; 
      var login_email = result[0].data_login_email; 
      var options = { 
       url: 'https://pi.pardot.com/api/prospect/version/4/do/read', 
       method: 'POST', 
       headers: headers, 
       form: { 
        'email': login_email, 
        'user_key': userkey, 
        'api_key': api 
       }, 
       json: true // Automatically stringifies the body to JSON 
      }; 

// Start the request 
      rp(options) 
       .then(function (parsedBody) { 
        console.error("pass"); 
        // $scope.FormLogin = true; 
       }) 
       .catch(function (err) { 
        console.error("fail"); 
       }); 
      console.error("Third done"); 
     }, 3000); 
    } 
    ); 
} 

// sequence of functions 
Promise.all([firstFunction(), secondFunction()]) 
    .then(thirdFunction); 

角控制器

FirstModule.controller('LoginController', function TestController($scope, $http) { 
    $scope.LoginForm = function() { 
     var data = { 
      LoginEmail: $scope.formData.LoginEmail 
     }; 

    $http({ 
     url: 'http://localhost:8080/back-end/test', 
     method: "POST", 
     data: data, 
     headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
    }).success(function (data) { 
     $scope.formData = data; // assign $scope.persons here as promise is resolved here 
    }).error(function (data, status) { 
     $scope.formData = status; 
    }); 

} 
}); 

角視圖

<form class="col-sm-8 col-sm-offset-2"> 
    <div> 
     <div class="form-group"> 
      <label>Email*</label> 
      <input type="email" class="form-control col-sm-12" name="LoginEmail" placeholder="Enter valid E-mail"> 
     </div> 

     <button class="" 
       ng-submit="LoginForm()"> 
      Login<span class=""></span> 
     </button> 
    </div> 
</form> 

回答

0

在Angular中,您可以使用$http服務發出http請求,然後處理響應。

你可以這樣做:

$http.post('/login', { 
    email: '[email protected]', 
    password: 'pwd' 
}).then(response => { 
    // use http status code 
    if (response.status === 403) { 
     alert('forbidden')' 
    } else { 
     // do something 
    } 
}) 
+0

我怎麼會如果通過鏈接這與我的節點後端或失敗? – Beep