Вызов API нескольких отдыхающих в одном промежуточном ПО - PullRequest
0 голосов
/ 25 сентября 2018

Я новичок в nodejs и не знаю, как реализовать несколько HTTP-вызовов в промежуточном программном обеспечении.

У меня есть следующие маршруты:

  1. / items (получить все элементы со всех серверов)
  2. / 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 () после объединения всех ответов.

Любые идеи, как реализоватьэто?

заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...