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