ExpressJS вызывает другой маршрут в другом маршруте

#node.js #express

#node.js #экспресс

Вопрос:

У меня есть этот файл, который называется 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);
 

Затем я помещаю разные маршруты в разные папки. Предположительно, я хочу использовать маршрут из файла A в маршруте в файле B следующим образом:

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;
 

В prdRouter, как я могу вызвать /some-endpoint в subRouter?

Ответ №1:

Что вы могли бы сделать, если создать функцию и просто вызвать ее в другом файле.

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;
 

Если вы конкретно хотите фактически вызвать конечную точку, тогда требуется обычный http-запрос. Установить https://github.com/axios/axios или что-то подобное.

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;
 

Замените xxxx на то, что использует ваш экспресс-сервер в качестве номера порта.

Комментарии:

1. Мне нравится первый подход, он намного чище.