CoteJS создание нескольких сервисов не работает - PullRequest
0 голосов
/ 08 апреля 2019

Я создаю несколько сервисов, используя cote.js , и у меня по 40 сервисов в каждом файле. Таким образом, проблема в том, что если я запускаю два из них, они работают без проблем, но если я запускаю третий или все из них, они не работают, включая два, которые работали ранее, снимок экрана вывода консоли:

Вот как это должно быть (при запуске двух сервисов) expected

Но вот что получается (когда запущено более двух): outputted

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);
    });
}

Если вам нужно, чтобы я опубликовал какой-либо код, просто спросите.

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