Reputation: 3072
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
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