首页 > 解决方案 > 如何重新路由多个 Express.js 路径并返回单个结果?

问题描述

我有几个我通常调用的 .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 调用,如果满足条件,它会同时返回两组数据。我怎样才能最好地做到这一点?

标签: javascriptexpressmongoose

解决方案


这对于快递来说是不可能的。最好的办法是让处理请求的函数成为独立函数,并在满足您的条件时调用它们以获取两个数据集。

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
}

推荐阅读