Я создаю несколько сервисов, используя cote.js , и у меня по 40 сервисов в каждом файле. Таким образом, проблема в том, что если я запускаю два из них, они работают без проблем, но если я запускаю третий или все из них, они не работают, включая два, которые работали ранее, снимок экрана вывода консоли:
Вот как это должно быть (при запуске двух сервисов)
Но вот что получается (когда запущено более двух):
request journey begins
- это самая первая строка кода в самом первом промежуточном программном обеспечении приложения
sending...
- это выход непосредственно перед вызовом requester.send
функции
recieved: null
- это вывод в первой строке выполнения кода при обратном вызове функции requester.send
, null
- это аргумент error
обратного вызова.
Мой код - обычный / обычный запросчик / ответчик со страницы документации сайта, только одна из служб из приложения, которая также имеет функцию express listen
(приложение ExpressJS).
Любая помощь будет высоко оценена, спасибо заранее.
Мой запросчик:
const requester = new Requester({
name: 'app-main',
key: process.env.APP_NAME
}, {
redis: {
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT
}
} as any);
app.set('requester', requester);
В основном использую этот запрос по всем маршрутам моего приложения
Мой респондент:
import {config} from 'dotenv';
import {basename, resolve} from 'path';
import {Responder} from 'cote';
import * as moment from 'moment';
import {ServiceCallback, ServiceRequest, LoggingParam} from '../helpers/types';
import logger from '../logger';
config({
path: resolve(__dirname, '..', '.env')
});
const responder = new Responder({
name: basename(__filename).substring(0, basename(__filename).indexOf('.service')),
key: process.env.APP_NAME
}, {
redis: {
host: process.env.REDIS_HOST,
port: Number(process.env.REDIS_PORT)
}
} as any);
responder.on(basename(__filename).substring(basename(__filename).indexOf('.') + 1, basename(__filename).indexOf('.service')), (request: ServiceRequest, callback: ServiceCallback) => {
const logParam: LoggingParam = {
level: 'info',
load: {
route: {
userAgent: request.userAgent,
ip: request.ip,
body: request.requestBody,
name: 'test'
},
content: {
message: 'Test function accessed'
}
}
};
logger(logParam);
callback(null, {
status: 200,
body: `
<h1>API is up</h1>
<p>Server time is ${moment().utcOffset(3).toDate()}</p>
`
});
});
Пример объявления моих маршрутов:
router.post('/settings', (request: Request, response: Response) => requestHandler(request, response, 'settings'));
Функция обработчика запроса:
export function requestHandler(request: express.Request, response: express.Response, handle: string): void {
const requester: Requester = request.app.get('requester');
const requestObject: ServiceRequest = {
type: handle,
channel: request.body.channel,
requestBody: request.body.data,
user: request.body.user,
userAgent: request.get('User-Agent'),
ip: request.ip
};
requester.send(requestObject, (error: any, result: ServiceResponse) => {
if (process.env.NODE_ENV === 'development' || !request.body.keyCombo) {
response.status(result.status).send(result.body);
return;
}
let dataToEncrypt = result.body;
if (result.body.constructor === {}.constructor) {
dataToEncrypt = JSON.stringify(result.body);
}
const credentials = request.body.keyCombo.split(';');
const key = enc.Utf8.parse(credentials[0]);
const iv = enc.Utf8.parse(credentials[1]);
const toEncrypt = enc.Utf8.parse(dataToEncrypt);
const encrypted = AES.encrypt(toEncrypt, key, { iv: iv }).toString();
response.status(result.status).send(encrypted);
});
}
Если вам нужно, чтобы я опубликовал какой-либо код, просто спросите.