Skip to content

Commit 78018ee

Browse files
committed
fix(src/routes/service.js): fix error handler for async
1 parent 82cd7b8 commit 78018ee

2 files changed

Lines changed: 50 additions & 48 deletions

File tree

src/index.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@ app.use(morgan('dev'));
4444
app.use(bodyParser.json({ limit: '5mb' }));
4545
const router = express.Router();
4646

47-
//eslint-disable-next-line
48-
router.use((error, req, res, next) => {
49-
logger.error({ error });
50-
res.status(500).send('Internal server error');
51-
});
52-
5347
router.get('/v1/catalog/services', makeServicesRoute(config));
5448
router.get('/v1/catalog/service/:service', makeServiceRoute(config, serviceDiscovery));
5549

@@ -65,8 +59,12 @@ router.get('/v1/agent/self', (req, res) => {
6559
});
6660
});
6761

68-
6962
app.use('/', router);
63+
//eslint-disable-next-line
64+
app.use((error, req, res, next) => {
65+
logger.error({ error });
66+
res.status(500).send('Internal server error');
67+
});
7068
app.get('*', (req, res) => {
7169
res.status(404).send('Not Found');
7270
});

src/routes/service.js

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,56 @@
11
export default (config, serviceDiscovery) => {
22
let oldConfig = null;
33

4-
return async (req, res) => {
5-
const actualConfig = serviceDiscovery.getActualConfig();
6-
7-
// Если модуль только стартанул,
8-
// надо сразу сгенерировать и отдать конфиг
9-
if (!actualConfig) {
10-
const generatedConfig = await serviceDiscovery.generateConfig();
11-
res.json(generatedConfig.getRawObject());
12-
return;
13-
}
14-
15-
// Если индекса нет
16-
// Значит запроси пришел либо в ручную
17-
// Либо это первый запрос
18-
const { index } = req.query;
19-
if (!index) {
20-
res.json(actualConfig.getRawObject());
21-
return;
22-
}
23-
24-
// Сам long polling
25-
// По таймауту, если конфиг не изменился
26-
// Отдаем текущий актуальный
27-
let responseSent = false;
28-
let interval = null;
29-
const timeout = setTimeout(() => {
30-
clearInterval(interval);
31-
if (responseSent) {
4+
return async (req, res, next) => {
5+
try {
6+
const actualConfig = serviceDiscovery.getActualConfig();
7+
8+
// Если модуль только стартанул,
9+
// надо сразу сгенерировать и отдать конфиг
10+
if (!actualConfig) {
11+
const generatedConfig = await serviceDiscovery.generateConfig();
12+
res.json(generatedConfig.getRawObject());
3213
return;
3314
}
3415

35-
responseSent = true;
36-
res.json(actualConfig.getRawObject());
37-
}, config.polling_interval);
38-
39-
interval = setInterval(() => {
40-
const actualConfigForIteration = serviceDiscovery.getActualConfig();
41-
if (actualConfigForIteration.equals(oldConfig)) {
16+
// Если индекса нет
17+
// Значит запроси пришел либо в ручную
18+
// Либо это первый запрос
19+
const { index } = req.query;
20+
if (!index) {
21+
res.json(actualConfig.getRawObject());
4222
return;
4323
}
4424

45-
clearTimeout(timeout);
46-
clearInterval(interval);
47-
oldConfig = actualConfigForIteration;
48-
const newConfig = serviceDiscovery.getActualConfig();
49-
res.json(newConfig.getRawObject());
50-
}, 1000);
25+
// Сам long polling
26+
// По таймауту, если конфиг не изменился
27+
// Отдаем текущий актуальный
28+
let responseSent = false;
29+
let interval = null;
30+
const timeout = setTimeout(() => {
31+
clearInterval(interval);
32+
if (responseSent) {
33+
return;
34+
}
35+
36+
responseSent = true;
37+
res.json(actualConfig.getRawObject());
38+
}, config.polling_interval);
39+
40+
interval = setInterval(() => {
41+
const actualConfigForIteration = serviceDiscovery.getActualConfig();
42+
if (actualConfigForIteration.equals(oldConfig)) {
43+
return;
44+
}
45+
46+
clearTimeout(timeout);
47+
clearInterval(interval);
48+
oldConfig = actualConfigForIteration;
49+
const newConfig = serviceDiscovery.getActualConfig();
50+
res.json(newConfig.getRawObject());
51+
}, 1000);
52+
} catch (error) {
53+
next(error);
54+
}
5155
};
5256
};

0 commit comments

Comments
 (0)