Как перенаправить несколько Express. js путей и вернуть один результат? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть несколько запросов .get, которые я обычно вызываю, например: notesController

controller.get('/customers/', async (req, res, next) => {
    const customers = await Customer.find();
    res.status(200).send(customers);
  });

controller.get('/documents/', async (req, res, next) => {
    const orders = await Order.find();
    res.status(200).send(orders);
  });

В некоторых случаях я хотел бы иметь возможность вызывать оба сразу, например:

controller.get('/version/', async (req, res, next) => {
  const ver = await Version.findById(req.headers.sub);
  if (req.headers.dbversion === ver.dbversion) {
     res.status(200).send({ versionMatch: true });
   } else {
     req.url = '/customers/';
     const custData = await controller.handle(req, res, next);
     req.url = '/orders/';
     const orders = await controller.handle(req, res, next);
     res.status(200).send({ customers: custData, docs: invoices });
     }
   });

Но это не работает. Добавляя консольное сообщение в мою функцию .get ('/ Customers'), я вижу, что оно вызывается, но не возвращает никаких данных. Мой желаемый результат заключается в том, что я делаю один вызов API, и если выполняются условия, он возвращает оба набора данных одновременно. Как мне лучше всего этого достичь?

1 Ответ

1 голос
/ 11 марта 2020

Это невозможно с express. Лучше всего сделать функции, обрабатывающие запрос, автономными функциями, а когда ваши условия будут выполнены, вызвать их для получения обоих наборов данных.

controller.get('/customers/', async (req, res, next) => {
    const customers = findCustomers(args);
    if (condition is met) {
      const orders = findOrders();
    }
    res.status(200).send({ customers, orders });
  });

controller.get('/documents/', async (req, res, next) => {
    const orders = findOrders(args);
    res.status(200).send(orders);
  });

function findCustomers(args) {
  const customers = await Customer.find();
  return customers;
}
function findOrders(args) {
  const orders = await Order.find();
  return orders
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...