NodeJS API с бэкэндом Kafka - PullRequest
       15

NodeJS API с бэкэндом Kafka

0 голосов
/ 21 февраля 2020

Я хочу создать основанный на NodeJS API, который подкреплен парадигмой pub-sub, например, с Kafka. Вот скелет того, что я хочу сделать.

const express = require('express')
const serverApp = express()
serverApp.get('/book/:bookId', (req, res) => {
    producer.send(JSON.stringify({
        action: 'get',
        message: req.params.bookId
    }))
    consumer.on('message', (data) => {
        res.status(200).send(JSON.parse(data))
    })
})

При вышеупомянутой опции первый вызов работает, но последующие сбои продолжаются с ERR_HTTP_HEADERS_SENT.

Для сохранения consumer.on за пределами serverApp.get потребуется согласование req и res.

Как реализовать такой API?

1 Ответ

2 голосов
/ 21 февраля 2020

Например, как скелет

const express = require('express')
const serverApp = express()

const responses = Object.create(null);

consumer.on('message', (data) => {
    const result = JSON.parse(data)
    const res = responses[result.replyId]
    res.status(200).send(result)
});

serverApp.get('/book/:bookId', (req, res) => {

    const replyId = Math.random().toString(36).substr(2);    
    responses[replyId] = res;

    producer.send(JSON.stringify({
        action: 'get',
        replyId,
        message: req.params.bookId
    }))
})
...