Как исправить «вызовы Api, сделанные несколько раз» - очень странная проблема - PullRequest
2 голосов
/ 17 апреля 2019

В моем API я использую nodeJS, expressJS. Это микросервисная архитектура. Я использовал экспресс-генератор для создания этого API. Ниже приводится моя структура маршрутизации. У меня есть промежуточное программное обеспечение и нормальная маршрутизация, как указано ниже. '*' используется для регулярных выражений.

// routing goes here for the middleware
app.use('/api/*/', (req, res, next) => {
  // send it to middleware
  middleware.entry(req, res, next);
});

// rest of the routing goes here, after satisfying the access conditions from middleware
app.use('/api/*/review', reviewRouter);

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

const entry = async (req, res, next) => {
    try {
        // let's get the auth url
        const url = process.env.AUTH_URL + req.originalUrl;

        console.log('review: ', req.body);
        let response = {};

        switch (req.method) {
            case 'GET':
                response = await fetch.get(url, {
                    method: 'get',
                    headers: req.headers
                });
                break;
            case 'POST':
                response = await fetch.get(url, {
                    method: 'post',
                    headers: req.headers,
                    body: JSON.stringify(req.body)
                });
                break;
            case 'PUT':
                response = await fetch.get(url, {
                    method: 'put',
                    headers: req.headers,
                    body: JSON.stringify(req.body)
                });
                break;
            case 'DELETE':
                response = await fetch.get(url, {
                    method: 'delete',
                    headers: req.headers
                });
                break;
        }

        if (response.code === 200) {
            // we got the successful result, the access is good
            if (response.data.user) {
                req.user = response.data.user;
            }
            next();
        }
        else {
            // error
            const error = response.error;
            return responseHelper.error(res, error, error.code ? error.code : codes.ERROR);
        }
    }
    catch (error) {
        console.log('e: ', error);
        responseHelper.error(res, error, error.code ? error.code : codes.ERROR);
    }
};

Возвращаясь к проблеме. Все отлично работает. Это прод и работает довольно хорошо уже около года. Вчера после установки некоторых обновлений я перезапустил свой сервер. Между ними произошло что-то, что увеличило количество запросов API. Например, когда я звонил / api / shopping / review, в идеале он должен отправить 1 запрос промежуточному программному обеспечению. Но он отправлял в промежуточное ПО более 200 запросов. Это было странно Как-то этот раздел:

// routing goes here for the middleware
app.use('/api/*/', (req, res, next) => {
  // send it to middleware
  middleware.entry(req, res, next);
});

было запущено 100 раз. Это случилось только один раз, и после перезапуска все вернулось в норму. Но это заставило меня задуматься о том, что может быть причиной этой двуличности запросов. Может ли кто-нибудь помочь мне понять, при каких обстоятельствах это поведение может быть воспроизведено? В чем может быть проблема? Это важно, потому что, если я не нахожу причину такого поведения, всегда существует угроза для приложения, если оно снова преследует меня. Будем благодарны за любые предложения.

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