【发布时间】:2017-06-28 19:46:09
【问题描述】:
简介
好的,我有一个内置于 Node 和 Angular 的应用程序。我使用 Angular 中的帖子将用户电子邮件传递给我的支持者,从支持者开始,支持者的顺序是:
- 获取电子邮件
- 获取 API 密钥
- 将电子邮件和 API 密钥发布到 API
我通过将电子邮件发布到 backed 然后使用 node 和 express get email 使用 promise resolve(第一个函数)将电子邮件传递给我的第三个函数以及从第二个函数检索的 API 密钥来做到这一点。
我需要什么
- Angular 发布到后端节点
- 运行第一个函数,如果第一个函数已检索到电子邮件,则运行函数 2。如果不正确,则将信息传递给第一个帖子 (Angular) 以显示消息。
- 运行第二个函数,如果为真则运行函数 3
- 如果 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