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(不确定这是否

我正在从事一个项目,该项目要求我:

  • 从API1获取ID,将ID推送到数组中,然后映射到这些ID上,将它们用于第二个GET请求,其中ID用作API2 GET请求的参数,用ID或N填充数组表示“不存在”-然后调用此数组:

  • 发帖请求。这篇文章映射了GET请求返回的数组。如果该项不是“N”,则它将以选中:true的方式发布到API1。如果项目为“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'));
    
    //依赖项
    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中间件。是的,你可以使用它很好,是的我帮忙