根据请求响应传递用户消息

时间:2017-06-27 14:40:32

标签: angularjs node.js api express https

简介

好的,我所拥有的是一个内置Node和Angular的应用程序。我使用Angular中的帖子将用户电子邮件传递给我的支持,来自支持的备份中的命令是:

  1. 收到电子邮件
  2. 获取API密钥
  3. 将电子邮件和API密钥发布到API
  4. 我这样做是通过发送电子邮件到支持然后使用节点和表达获取电子邮件使用promise resolve(第一个函数)将电子邮件传递给我的第三个函数以及从第二个函数检索的API密钥。

    我需要什么

    1. Angular post to back end Node
    2. 运行第一个函数,如果第一个函数检索到电子邮件,则运行函数2.如果不正确则将信息传递给第一个帖子(Angular)以显示消息。
    3. 运行第二个功能,如果是true运行功能3
    4. 最后使用从函数1和2收集的数据运行post,如果post正确地将200代码传递给第一个函数或传递给angular post。
    5. 需要

      每个步骤(节点中的功能1,2和3)的前端验证(Angular)它们可以是响应代码,以便我可以根据响应代码打印不同的消息

      目标

      用户在前端发布电子邮件,然后根据API上是否接受电子邮件让用户知道,这是不同的消息或重定向进来播放的地方,具体取决于它是错误还是正确的电子邮件。

      我的代码

      Angular side

      这是Node后端的第一个帖子发生的地方,如果根据后端的结果得到不同的响应请求会很好。

      var firstFunction = function () {
              return new Promise(function (resolve) {
                  setTimeout(function () {
                      app.post('/back-end/controller', 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);
              });
          };
      

      节点方(全部在controler.js中)

      第一个功能

      如果没有将响应代码发送回Angular请求,我希望这能触发功能2。

       var firstFunction = function () {
          return new Promise(function (resolve) {
              setTimeout(function () {
                  app.post('/back-end/controller', function (req, res) {
                      console.log(req.body);
                      var login = req.body.LoginEmail;
                      //Promise.all([firstFunction(), secondFunction()]) .then(thirdFunction);
                      //res.send(login);
                      resolve({
                          data_login_email: login
                      });
                  });
                  console.error("First done");
              }, 2000);
          });
      };
      

      第二项功能

      此函数获取API密钥,如果此函数成功触发函数三。

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

      第三功能

      如果第二个函数通过那么这个函数应该使用第一个的电子邮件和第二个的API密钥运行,如果成功则传递成功返回第一个函数传递给角度侧200成功,或者直接发送一个请求对Angular的响应,如果失败则再次让前端知道。

       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.info(login_email, "Is a user, login pass!");
                                  // router.redirect('/login'); // main page url
                                  //  res.send.status(200);
                              })
                              .catch(function (err) {
                                  console.error("fail no such user");
                                  // res.status(400).send()
      
                              });
                          console.error("Third done");
                      }, 3000);
                  }
              );
          }
      
      
      Promise.all([firstFunction(), secondFunction()]) .then(thirdFunction);
      

      如果有人知道怎么做,请帮助,这是我的应用程序的最后一部分我需要工作,谢谢。

      Summery

      总之,我想要不同的响应代码Angular side取决于函数在何时何地支持或者它是否通过所有三个函数。

      例如:

      • 请求代码无法发布到支持
      • 无法在功能2上获取API密钥
      • 无法在第三个功能
      • 上向API发送电子邮件
      • API上没有电子邮件
      • API上的电子邮件和所有通行证,你的内容!!

        更新

      我发现我可以使用以下内容将消息传回我的Angular帖子,但是如何根据运行的函数将此消息设置为不同?

      var firstFunction = function () {
              return new Promise(function (resolve) {
                  setTimeout(function () {
                      app.post('/back-end/controller', function (req, res) {
                          console.log(req.body);
                          // res.status(500).send({ error: "boo:(" });
                          res.send('hello world');
                          var login = req.body.LoginEmail;
                          res.send(login);
                          resolve({
                              data_login_email: login
                          });
                      });
                      console.error("First done");
                  }, 2000);
              });
          };
      

1 个答案:

答案 0 :(得分:0)

我通过将2个函数合并为一个(检索函数和帖子)解决了这个问题,然后我改变了承诺链

 var firstFunction = 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("Success your API key is", api_key);
                        resolve({data_api: api_key});
                    }
                });
            }, 2000);
        });
    };


var secondFunction = function (result) {
    return new Promise(function () {
        setTimeout(function () {
            app.post('/back-end/controller', function (req, res) {
                console.log(req.body);
                var login = req.body.LoginEmail;
                var api = result[0].data_api;
                var headers = {
                    'User-Agent': 'Super Agent/0.0.1',
                    'Content-Type': 'application/x-www-form-urlencoded'
                };
                var options = {
                    url: 'https://pi.pardot.com/api/prospect/version/4/do/read',
                    method: 'POST',
                    headers: headers,
                    form: {
                        'email': login,
                        'user_key': userkey,
                        'api_key': api
                    },
                    json: true // Automatically stringifies the body to JSON
                };

                if (login.length !== 0) { // maybe use node email validation ?
                    console.log("Email Accepted, Next posting to API.......");

                    rp(options)
                        .then(function (parsedBody) {
                            console.info(login, "Is a user, login pass!");
                            res.status(200).send({ user: login });
                        })
                        .catch(function (err) {
                            console.error("fail no such user");
                            res.status(400).send('fail to login');
                        });
                } else {
                    console.log("Failed to get email from front end");
                    res.status(404).send('Incorrect length');
                }
            });
        });
    });
};

Promise.all([firstFunction()]).then(secondFunction);