NodeJS - Запрос заказа и ответ - PullRequest
0 голосов
/ 16 февраля 2020

В следующем фрагменте client является клиентом обмена сообщениями в пабе / под-сообщении.

comm.js (обфусцировано по понятным причинам ....)

const communicator = class extends EventEmitter {
    constructor(options) {
        super();
        // Some configuration 
        // Then, instantiate
        this.commClient = ...
    }
    //
    sendMessage(message) {
        // Send message over TCP socket
    }
    //
    messageReceived() {
        // Receive message 
        this.commClient.on('message', (data) => {
            this.emit('msg', data)
        })
    }
}
const comm = require('./comm.js')
let client = new comm.communicator()

const server = serverApp.listen(process.env.SERVER_PORT, () => {
    console.log('Server up.')
})

serverApp.get('/book/:bookId', (req, res) => {
    client.sendMessage(JSON.stringify({
        action: 'get',
        message: req.params.bookId
    }))
    client.on('msg', (data) => {
        res.status(200).send(data)
    })
})

Рассмотрим следующую последовательность.

  1. GET запрос получен.
  2. client.sendMessage выполнено.
  3. client.on нет получено.
  4. Второй GET запрос получен.
  5. client.sendMessage выполнено.
  6. client.on получено.

Как узнать, для какого вызова (первый или второй) был получен client.on? Даже если я следил за этим (скажем, за Redis), откуда мне знать, что я делаю res.status(200).send для первого или второго вызова?

...