Node Js App to call back an API

Here is an example of an API to send back an API response when something is posted into and API and called it to an another API.

Folder Structure is Like

// src/routes/index.js
const express = require('express');
const router = express.Router();
const axios = require('axios');


router.post('/fetchStatement', async (req, res, next) => {
  try {
    const { CORPID, USERID, AGGRID, ACCOUNTNO, FROMDATE, TODATE, URN } = req.body;


    // Validate required fields
    if (!CORPID || !USERID || !AGGRID || !ACCOUNTNO || !FROMDATE || !TODATE || !URN) {
      return res.status(400).json({ message: 'All fields are required' });
    }


    // Simulate an external API call
    const externalApiUrl = ICICI_BANK_API/`${URN}`;
    const externalResponse = await axios.get(externalApiUrl);
    const generateTransactionId = () => Date.now().toString();


    // Construct response based on external API call and request data
    const responseData = {
      RESPONSE: 'SUCCESS',
      USER_ID: USERID,
      CORP_ID: CORPID,
      AGGR_ID: AGGRID,
      URN: URN,
      ACCOUNTNO: ACCOUNTNO,
      Record: [
        {
          CHEQUENO: "",
          TXNDATE: "27-03-2017 12:58:21",
          REMARKS: "INF/000004527041/Dealer",
          AMOUNT: "2.00",
          BALANCE: "10,50,908.00",
          VALUEDATE: "01-01-2016",
          TYPE: "DR",
          TRANSACTIONID: generateTransactionId()
        },
        {
          CHEQUENO: "",
          TXNDATE: "27-03-2017 12:58:45",
          REMARKS: "INF/000004527044/Dealer",
          AMOUNT: "2.00",
          BALANCE: "10,50,906.00",
          VALUEDATE: "01-01-2016",
          TYPE: "DR",
          TRANSACTIONID: generateTransactionId()
        },
        {
          CHEQUENO: "",
          TXNDATE: "27-03-2017 12:59:02",
          REMARKS: "INF/000004527046/Dealer",
          AMOUNT: "2.00",
          BALANCE: "10,50,904.00",
          VALUEDATE: "01-01-2016",
          TYPE: "DR",
          TRANSACTIONID: generateTransactionId()
        }
      ]
    };


    // Assume a condition to return FAILURE response
    if (externalResponse.data.someCondition) {
      return res.status(400).json({
        MESSAGE: "Transactions are more than 2000. Please use consolidated statement option.",
        RESPONSE: "Failure"
      });
    }


    res.status(200).json(responseData);
  } catch (error) {
    next(error);
  }
});


module.exports = router;

app.js

const express = require('express');
const routes = require('./src/routes');
const errorHandler = require('./src/middleware/errorHandler');
const cors = require('cors');
require('dotenv').config();


const app = express();


app.use(cors());
app.use(express.json());
app.use('/', routes);
app.use(errorHandler);


app.get('/testserver', (req, res) => {
  let testServer = {
    "summary": {
      status: "SUCCESS", reason: "SERVER_RUNNING"
    }
  }
  res.send(JSON.stringify(testServer));
});


app.use('/', routes);
app.use(errorHandler);


const PORT = process.env.PORT || 3100;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

Leave a comment

Your email address will not be published. Required fields are marked *