【问题标题】:how to invoke node module inside from function?如何从函数内部调用节点模块?
【发布时间】:2016-07-12 20:32:23
【问题描述】:

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

【问题讨论】:

  • 确切的错误是什么?
  • 它的抛出错误ditconsumer is not a function
  • 运行 startConsumer 函数时,您正在替换代码中的导出。取而代之的是,尝试仅使用新属性扩展出口。我的意思是exports.startConsumer = function(io)....
  • @hussain 那是因为你不只是导出一个函数。您正在导出一个属性为start 的对象。你需要打电话给ditconsumer.start,然后你在那个函数的导出中做了一些奇怪的事情......
  • 我是 nodejs 新手,如果有更好的方法来实现这一点,我将不胜感激。

标签: javascript node.js socket.io


【解决方案1】:

希望这项工作适合你:

ma​​in.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!');  
});

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2014-01-24
    • 2011-09-14
    • 2022-11-10
    相关资源
    最近更新 更多