我正在开展一个项目,要求我:
从API1获取ID,将ID推送到数组中,然后映射这些ID,将它们用于第二个GET请求,其中ID用作API2 GET请求的参数,填充ID或N的数组for“Not existing” - 然后调用此数组:
POST请求。这篇文章映射了GET请求中返回的数组。如果该项目不是“N”,它将以检查的方式发送到API1:true。如果该项目为“N”,它会通过电子邮件告诉我们API2缺少此项目。
我希望这个系统每2小时自动执行一次GET和POST,所以我正在使用setInterval(不确定这是最好的主意)。编辑:Cron工作将是一个更好的解决方案。
我正在使用NodeJS,Express,Request-Promise,Async / Await。
到目前为止,这是我的一些伪代码:
// Dependencies
const express = require('express');
const axios = require('axios');
const mailgun = require('mailgun-js')({ apiKey, domain });
// Static
const app = express();
app.get('/', (req, res, next) => {
// Replace setInterval with Cron job in deployment
// Get All Ids
const orders = await getGCloud();
// Check if IDs exist in other API
const validations = await getProjectManagementSystem(orders);
// If they exist, POST update to check, else, mailer
validations.map(id => {
if (id !== 'n') {
postGCloud(id);
} else {
mailer(id);
}
});
}
// Method gets all IDs
const getGCloud = async () => {
try {
let orders = [];
const response = await axios.get('gCloudURL');
for (let key in response) {
orders.push(response.key);
}
return orders;
} catch (error) {
console.log('Error: ', error);
}
}
// Method does a GET requst for each ID
const getProjectManagementSystem = async orders => {
try {
let idArr = [];
orders.map(id => {
let response = await axios.get(`projectManagementSystemURL/${id}`);
response === '404' ? idArr.push('n') : idArr.push(response)
})
return idArr;
} catch (error) {
console.log('Error: ', error);
}
}
const postGCloud = id => {
axios.post('/gcloudURL', {
id,
checked: true
})
.then(res => console.log(res))
.catch(err => console.log(err))
}
const mailer = id => {
const data = {
from: 'TESTER <test@test.com>',
to: 'customerSuppoer@test.com',
subject: `Missing Order: ${id}`,
text: `Our Project Management System is missing ${id}. Please contact client.`
}
mailgun.messages().send(data, (err, body) => {
if (err) {
console.log('Error: ', err)
} else {
console.log('Body: ', body);
}
});
}
app.listen(6000, () => console.log('LISTENING ON 6000'));
TL; DR:需要向API 1发出GET请求,然后向API 2发出另一个GET请求(使用来自API 1的ID作为参数),然后将数据从第二个GET发送到POST请求,然后执行更新API 1的数据或电子邮件客户支持。这是一个每两小时运行一次的自动系统。
主要问题: 1.在get req中有一个setInterval可以吗? 2.我可以让GET请求自动调用POST请求吗? 3.如果是,我如何将GET请求数据传递给POST请求?
答案 0 :(得分:1)
要使它适用于您的两个调用,一个帖子和一个调用,您必须执行Ajax调用以获取另一个方法中的后处理信息。
我希望这有效。