NodeJS - Как быстро ждать ответа? - PullRequest
0 голосов
/ 05 июля 2019

Я работаю с очень маленьким фрагментом кода nodeJS, который использует экспресс.Приложение получает полезную нагрузку как POST и отправляет ее другому методу, который отправляет ее на kafka.Как только это произойдет, мне нужно вернуть ответ обратно, чтобы выразить, чтобы он мог закрыть соединение на основе состояния (например, вернуть ответ 200).

// producer.js

// Defined variables
var kafka = require('kafka-node'),
    Producer = kafka.Producer;

module.exports = {

    sendToProducer: function (payload) {

        // Define our kafka settings
        var client = new kafka.KafkaClient(),
            producer = new Producer(client);

        // On producer ready
        producer.on('ready', function () {

            // Send our payload to our topic
            producer.send(payload, function (err, data) {
                console.log(data);
                // Return our response back to `app.js` so express can handle it.
            });

        });

        // On producer error
        producer.on('error', function (err) {
            console.log('Producer Error', err)
        })
    }

};



// app.js
app.post('/payload', function (req, res) {

    // Define our route
    const payload = req.body;
    const route = payload.route;

    // Check to see if we have a route
    if(!route){
        logError('no route');
    }

    let mappedData = [{ topic: 'test', messages: 'hi... ', partition: 0 }]

    // Based on the route
    switch(route){

        // Receive data
        case 'ingest':
            producer.sendToProducer(mappedData);
            // How can I tell express the status of the above method so that we can close the request? (ex 200 response for example?)
        break;

        // Handle undefined routes
        default:

        break;
    }

});

В моем app.js выражении case,как мне ждать ответа / обратного вызова от producer.sendToProducer(mappedData);, чтобы я мог соответствующим образом обработать экспресс-статус?

1 Ответ

1 голос
/ 05 июля 2019

Убедитесь, что ваша sendToProducer() является promise / async функцией:

app.post('/payload', async function (req, res) {

    // Define our route
    const payload = req.body;
    const route = payload.route;

    // Check to see if we have a route
    if(!route){
        logError('no route');
    }

    let mappedData = [{ topic: 'test', messages: 'hi... ', partition: 0 }]

    // Based on the route
    switch(route){

        // Receive data
        case 'ingest':
            await producer.sendToProducer(mappedData);
            // How can I tell express the status of the above method so that we can close the request? (ex 200 response for example?)
        break;

        // Handle undefined routes
        default:

        break;
    }

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