Задать вопрос
@ionik_1

Как исправить ошибку Cannot convert undefined or null to object?

Пытаюсь разобраться в микросервисах, и как они общаются по этому посту

Сделал все так же, кроме монги, просто подставил id 1. При отправке запроса testq:9000/market/buy/1 получаю ошибку в market.js Cannot convert undefined or null to object?

gateway

const Gateway = require('micromq/gateway');

const gateway = new Gateway({
    microservices: ['market'],
    rabbit: {
        url: "amqp://localhost:5672",
    },
});

gateway.get('/market/buy/:id', (req, res) => res.delegate('market'));
gateway.get('/market', (req, res) => res.delegate('market'));

gateway.listen(9000);


notifications

const MicroMQ = require('micromq');
const WebSocket = require('ws');

// создаем микросервис
const app = new MicroMQ({
    name: 'notifications',
    rabbit: {
        url: "amqp://localhost:5672",
    },
});

// поднимаем сервер для принятия запросов по сокетам
const ws = new WebSocket.Server({
    port: 9001
});

// здесь будем хранить клиентов
const clients = new Map();

// ловим событие коннекта
ws.on('connection', (connection) => {
    // ловим все входящие сообщения
    connection.on('message', (message) => {
        // парсим сообщение, чтобы извлечь оттуда тип события и параметры.
        // не забудьте в продакшене добавить try/catch, когда будете парсить json!
        const { event, data } = JSON.parse(message);
        ws.clients.forEach(clients => {
            console.log(clients.send(console.log(message)))
        })
        // на событие 'authorize' сохраняем коннект пользователя и связываем его с айди
        if (event === 'authorize' && data.userId) {
            // сохраняем коннект и связываем его с айди пользователя
            clients.set(data.userId, connection);
        }
    });
});

// не забудьте реализовать удаление клиента после дисконнекта,
// иначе получите утечку памяти!
ws.on('close', function close() {
    console.log('disconnected');
});

// создаем действие notify, которое могут вызывать другие микросервисы
app.action('notify', (meta,res) => {
    // если нет айди пользователя или текста, тогда возвращаем статус 400
    if (!meta.userId || !meta.text) {
        res.status(400)
        res.json({error: 'Bad'})
        // return [400, { error: 'Bad data' }];
    }

    // получаем коннект конкретного пользователя
    const connection = clients.get(meta.userId);

    // если не удалось найти коннект, тогда возвращаем статус 404
    if (!connection) {
        return [404, { error: 'User not found' }];
    }

    connection.send(console.log('ТЕКС'));

    res.json({ ok: true})

});

app.start();


market

const MicroMQ = require('micromq');
const Items = new Object();
Items.id = 1

const app = new MicroMQ({
    name: 'market',
    rabbit: {
        url: "amqp://localhost:5672",
    },
});

app.get('/market/buy/:id',async (req, res) => {
    const { id } = req.params;

    req.app.ask('notifications', {
        server: {
            action: 'notify',
            meta: {
                userId: Items.id,
                text: JSON.stringify({
                    event: 'notification',
                    data: {
                        text: `Item #${id} was sold!`,
                    },
                }),
            },
        },
    }).catch(err => console.log('error', err));

    res.json({
        ok: true,
    });
});

app.start();



60ffc1c47c431717086384.jpeg

Не могу понять почему он не может преобразовать, передаю в ask query объект, а не null или undefined. Уже неделю не как не получается исправить, помогите пожалуйста
  • Вопрос задан
  • 1567 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Открой node_modules/micromq/src/MicroService.js, добавь туда console.log в строках 36 и 74, выведи значения переменных. Или даже попробуй зайти дебаггером. В общем, код в открытом исходном виде, можно разобраться за пару часов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы