【问题标题】:Pass user messages depending on request response根据请求响应传递用户消息
【发布时间】:2017-06-28 19:46:09
【问题描述】:

简介

好的,我有一个内置于 Node 和 Angular 的应用程序。我使用 Angular 中的帖子将用户电子邮件传递给我的支持者,从支持者开始,支持者的顺序是:

  1. 获取电子邮件
  2. 获取 API 密钥
  3. 将电子邮件和 API 密钥发布到 API

我通过将电子邮件发布到 backed 然后使用 node 和 express get email 使用 promise resolve(第一个函数)将电子邮件传递给我的第三个函数以及从第二个函数检索的 API 密钥来做到这一点。

我需要什么

  1. Angular 发布到后端节点
  2. 运行第一个函数,如果第一个函数已检索到电子邮件,则运行函数 2。如果不正确,则将信息传递给第一个帖子 (Angular) 以显示消息。
  3. 运行第二个函数,如果为真则运行函数 3
  4. 如果 post 正确地将 200 代码传递给第一个函数或传递给 angular post,则使用从函数 1 和 2 收集的数据最后运行 post。

需要

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

目标

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

我的代码

角边

这是第一次发布到 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中)

第一个函数

如果成功,我希望它触发函数 2,如果没有将响应代码发送回 Angular 请求。

 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 key,如果此函数成功触发函数三。

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

如果有人知道如何执行此操作,请您帮忙,这是我需要开始工作的应用程序的最后一部分,谢谢。

夏天

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

例如:

  • 请求代码无法发布到支持
  • 在函数 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);
        });
    };

【问题讨论】:

    标签: angularjs node.js api express https


    【解决方案1】:

    我通过将 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);
    

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2013-09-26
      • 2011-12-04
      相关资源
      最近更新 更多