Node.js 如何:从2个API获取数据、比较、发布bool
我正在从事一个项目,该项目要求我:Node.js 如何:从2个API获取数据、比较、发布bool,node.js,api,express,request,async-await,Node.js,Api,Express,Request,Async Await,我正在从事一个项目,该项目要求我: 从API1获取ID,将ID推送到数组中,然后映射到这些ID上,将它们用于第二个GET请求,其中ID用作API2 GET请求的参数,用ID或N填充数组表示“不存在”-然后调用此数组: 发帖请求。这篇文章映射了GET请求返回的数组。如果该项不是“N”,则它将以选中:true的方式发布到API1。如果项目为“N”,它会给我们发送电子邮件,告诉我们API2缺少此项目 我希望这个系统每2小时自动执行一次GET和POST,所以我使用的是setInterval(不确定这是否
// 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'));
//依赖项
const express=require('express');
const axios=require('axios');
const mailgun=require('mailgun-js')({apiKey,domain});
//静止的
常量app=express();
app.get(“/”,(请求、恢复、下一步)=>{
//在部署中用Cron作业替换setInterval
//获取所有ID
const orders=wait getGCloud();
//检查其他API中是否存在ID
const validations=等待getProjectManagementSystem(订单);
//如果存在,则将更新后的邮件发送给检查人员,否则发送邮件
validations.map(id=>{
如果(id!='n'){
postGCloud(id);
}否则{
邮递员(id);
}
});
}
//方法获取所有ID
const getGCloud=async()=>{
试一试{
让订单=[];
const response=wait axios.get('gCloudURL');
for(让输入响应){
命令.推送(响应.键);
}
退货订单;
}捕获(错误){
console.log('Error:',Error);
}
}
//方法对每个ID执行GET请求
const getProjectManagementSystem=异步订单=>{
试一试{
设idArr=[];
orders.map(id=>{
let response=wait axios.get(`projectManagementSystemURL/${id}`);
响应=='404'?idArr.push('n'):idArr.push(响应)
})
返回idArr;
}捕获(错误){
console.log('Error:',Error);
}
}
const postGCloud=id=>{
axios.post(“/gcloudURL”{
身份证件
核对:正确
})
.then(res=>console.log(res))
.catch(err=>console.log(err))
}
const mailer=id=>{
常数数据={
来自:“测试员”,
致:'customerSuppoer@test.com',
主题:`缺少顺序:${id}`,
text:`我们的项目管理系统缺少${id}。请与客户联系。`
}
mailgun.messages().send(数据,(错误,正文)=>{
如果(错误){
console.log('Error:',err)
}否则{
log('Body:',Body);
}
});
}
app.listen(6000,()=>console.log('listeningon6000');
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请求?要使它同时适用于两个调用—一个POST和一个GET—您必须使用另一种方法执行Ajax调用以获取后期处理的信息
我希望这能起作用。这里面可能有很多错误——但这是我未经测试的思维过程。我不完全确定我能使这个系统自动化——这有可能吗?你是否尝试过使用Promissions?我希望Promissions能帮你解决这个问题?是的,你可以使用Express中间件。是的,你可以使用它很好,是的我帮忙