fareed
fareed

Reputation: 3072

ExpressJS call another route in different route

I have this file called server.js

import subRouter from "./routes/sub";
import prdRouter from "./routes/prd";

const app = express();
app.use("/sub", subRouter);
app.user("/prd", prdRouter);

app.listen(3000);

Then I put different routes in different folders. Supposedly I want to use a route from file A in a route in file B as following:

sub.js:

const subRouter = Router();

subRouter.get("/some-endpoint", async (req, res) => {
  //do something
  res.send();
});

module.exports = subRouter;

prd.js:

const prdRouter = Router();

prdRouter.post("/some-prd-endpoint", async (req, res) => {
   //call (/some-endpoint) in subRouter and receive its response 
}

module.exports = prdRouter;

In prdRouter, how can I call /some-endpoint in subRouter?

Upvotes: 1

Views: 2569

Answers (1)

basickarl
basickarl

Reputation: 40464

What you could do if create a function and just call it in the other file.

sub.js:

const subRouter = Router();

function doSomething() {
  //...stuff
  return 'hello';
}

subRouter.get("/some-endpoint", async (req, res) => {
  const hello = doSomething();
  res.send(hello);
});

module.exports = {
  subRouter,
  doSomething
};

prd.js:

const sub = require('./sub');
const prdRouter = Router();

prdRouter.post("/some-prd-endpoint", async (req, res) => {
   const hello = sub.doSomething();
});

module.exports = prdRouter;

If you specifically want to actually call the endpoint then a regular http request is required. Install https://github.com/axios/axios or something similar.

sub.js:

const subRouter = Router();

subRouter.get("/some-endpoint", async (req, res) => {
  res.send();
});

module.exports = subRouter;

prd.js:

const axios = require('axios');
const prdRouter = Router();

prdRouter.post("/some-prd-endpoint", async (req, res) => {
  try {
    const response = await axios.get('http://localhost:xxxx/some-endpoint'); // <--- replace here!
    console.log(response);
  } catch (error) {
    console.error(error);
  }
});

module.exports = prdRouter;

Replace xxxx with whatever your express server is using as it's port number.

Upvotes: 1

Related Questions