如何从函数中调用节点模块?

时间:2016-07-12 20:32:23

标签: javascript node.js socket.io

我有一种情况,我正在通过创建消费者来收听来自kafka服务器的消息,现在consumer.on正在从kafka获取消息现在我必须使用socket.io将这些消息发送给客户端,所以一旦我收到消息我已经创建了将发出消息的导出方法,所以在下面的代码中我已经导出了start方法,所以我可以启动消费者和socket.io连接,但它抛出异常./main require不是一个函数。一旦消费者收到消息,我如何使用socket.io发送消息。

main.js

function start() {
  var consumer_client = new kafka.Client(kafkaConn, clientId);
  var client = new Client(consumer_client.connectionString, clientId);
  var consumer = new HighLevelConsumer(client, topics, options);

  startConsumer(consumer);
};

function startConsumer(consumer) {
  consumer.on('message', function(message) {
    logger.log('info', message.value);
    exports = module.exports = function(io) {
      io.sockets.on('connection', function(socket) {
        socket.emit('ditConsumer', message.value);
      });
    }
  });
  consumer.on('error', function(err) {
    console.log('error', err);
  });
};

exports.start = start;

app.js

var ditconsumer = require('./main');

server.listen(3000, function() {
  console.log('Example app listening on port 3000!');
  Producer.startProducer();
  ditconsumer.start();
});

1 个答案:

答案 0 :(得分:0)

希望这项工作适合你:

<强> main.js:

    var Consumer = {
        start:function(scfun) {
              var consumer_client = new kafka.Client(kafkaConn, clientId);
              var client = new Client(consumer_client.connectionString, clientId);
              var consumer = new HighLevelConsumer(client, topics, options);
              consumer.on('message', function(message) {
                logger.log('info', message.value);
                scfun(message.value);
              });
              consumer.on('error', function(err) {
                console.log('error', err);
              });         
            };

    };
    module.exports = Consumer;

app.js:

var ditconsumer = require('./main');

io.sockets.on('connection',function(){      
    Producer.startProducer();  
    ditconsumer.start(function(value){
     io.emit('ditConsumer',value)
    });
});

server.listen(3000, function() {
  console.log('Example app listening on port 3000!');  
});