Node.js/Express middleware to relay requests to various APIs I am creating a nodejs middleware server that will handle api transactions from a frontend and relay them to various api's (internal and external). The primary goal is to hide api keys from the frontend. It can also consolidate requests that may require 2 or more endpoints, and modify data structures, thus simplifying our frontend code.

I am hoping for feedback on overall design/structure which will allow us to create a project that will be flexible as we add more apis while keeping it DRY

URLs, keys, etc. are stored in a .env file

index.js

require('dotenv').load();
const express = require('express'),
  app = express(),
  request = require("./request").request,
  bodyParser = require('body-parser');

app.use(bodyParser.json());

//returns all locations
app.get("/locations", (req, res) =&gt; {
  let URL = '...';
  request({
    method: 'get',
    url: URL,
    api: 'apiName'
  }).then((resp) =&gt; {
    res.json(resp);
  })
});

//send password reset link
app.post("/resetemail", (req, res) =&gt; {
  let URL = '...';
  let DATA = req.body;

  request({
    method: 'post',
    url: URL,
    api: 'apiName',
    data: DATA
  }).then((resp) =&gt; {
    res.json(resp);
  })
});

app.listen(3000);


request.js

module.exports.request = function (options) {

  const client = require('./' + options.api).instance;
  const handleError = require('./' + options.api).handleError;
  const onSuccess = function (response) {
    console.log('Request Successful!', response);
    return response.data;
  }

  return client(options)
    .then(onSuccess)
    .catch(handleError);
}


apiName.js

const axios = require('axios');
const axiosInstance = axios.create({
  headers: { "token": process.env.API_TOKEN },
  baseURL: process.env.API_BASE_URL,
  timeout: 2000
});

const handleError = function (error) {
  console.error('Request Failed:', error.config);

  if (error.response) {
    console.error('Status:', error.response.status);
    console.error('Data:', error.response.data);
    console.error('Headers:', error.response.headers);

  } else {
    console.error('Error Message:', error.message);
  }

  return Promise.reject(error.response || error.message);
}

module.exports = {
  instance: axiosInstance,
  handleError: handleError
}
I think you need to add some middle-wares that helps to run your API code after that middle-ware with proper structuring way.

I would suggest the NPM Module express-app-generator

The advantages of it include:


Code Management in clean way.
Structured Routing.
Add Multiple Middle-Wares in filters array.
Create CRUD API's with REST or CRUD Keyword.