javascript - 如何重新路由多个 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 调用,如果满足条件,它会同时返回两组数据。我怎样才能最好地做到这一点?
解决方案
这对于快递来说是不可能的。最好的办法是让处理请求的函数成为独立函数,并在满足您的条件时调用它们以获取两个数据集。
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
}