Я новичок в nodejs и не знаю, как реализовать несколько HTTP-вызовов в промежуточном программном обеспечении.
У меня есть следующие маршруты:
- / items (получить все элементы со всех серверов)
- / server1 / items (получить все элементы с определенного сервера)
Основной маршрутизатор:
router.use('/items', ItemsRouter);
router.use('/:server/items', ItemRouter);
items.router.ts:
router.get('/', getAllItems);
item.router.ts:
router.get('/', getAccessToken, getItems);
Для маршрутизатора элементов я использую промежуточное программное обеспечение "getAccessToken", которое добавляет определенные заголовки авторизации.
getItems (промежуточное программное обеспечение)
export function getItems(req, res, next) {
getItemsFromServer().then(items => {
res.body = items;
res.status(200);
next();
}).catch(err => {
logger.debug('failed: err ', err);
});
}
getAllItems (промежуточное программное обеспечение)
Мне нужно несколько раз вызвать getItems для каждого сервера, и перед вызовом янужно также вызывать промежуточное программное обеспечение getAccessToken
let allPromises:Array<Promise<any[]>> = [];
Object.keys(config.servers).map(serverName => {
req.headers.server_name = serverName ;
getAccessToken(req, res, next);
allPromises.push(getItems(req, res, next));
});
Promise.all(allPromises).then(items => {
let response = [];
items.map(item => {
response = response .concat(item );
});
res.body = response;
res.status(200);
next();
}).catch(err => {
logger.debug('failed: err ', err);
});
Теперь getAccessToken делать некоторые асинхронные вызовы и когда закончить вызов next ();Поэтому при циклическом просмотре списка серверов код не ждет, пока getAccessToken завершит работу и продолжит работу с getItems middleware.
Я увидел, что могу вызывать несколько промежуточных программ, напримерэто:
getAccessToken(req, res, ()=>{
getItems(req, res, next);
});
Но это только один вызов на конкретный сервер, и мне нужно вызывать его несколько раз и вызывать next () после объединения всех ответов.
Любые идеи, как реализоватьэто?
заранее спасибо