简介
好的,我所拥有的是一个内置Node和Angular的应用程序。我使用Angular中的帖子将用户电子邮件传递给我的支持,来自支持的备份中的命令是:
我这样做是通过发送电子邮件到支持然后使用节点和表达获取电子邮件使用promise resolve(第一个函数)将电子邮件传递给我的第三个函数以及从第二个函数检索的API密钥。
我需要什么
需要
每个步骤(节点中的功能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取决于函数在何时何地支持或者它是否通过所有三个函数。
例如:
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);
});
};
答案 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);