如何退出node.js中的函数

bjp0bcyl  于 2021-06-07  发布在  Kafka
关注(0)|答案(2)|浏览(410)

我希望程序停止侦听请求,并在成功加载页面一次后继续执行代码。我试过放一个 break; 在函数的代码末尾,但它表示这是非法中断。我不知道我应该用什么来代替休息。
我应该如何使它退出函数?
提前谢谢。
我将此站点中的以下代码用于node.js:

var http = require("http");
var port = 3000;
var serverUrl = "localhost";

var Kafka = require('no-kafka');
var connString = ' kafka://192.168.0.108:9092, 192.168.0.108:9092 '
var consumer = new Kafka.SimpleConsumer({ connectionString: connString });

var message = ["start"];

var server = http.createServer(function(req, res) {
    console.log("Request: " + req.url);  
    var now = new Date();  
    var html = "<p>Hello World, the time is " + now + "- Messages: " + message + ".</p>";
    res.end(html);
    console.log("a");
    server.close();
    console.log("b");
});

// data handler function can return a Promise 
var dataHandler = function (messageSet, topic, partition) {
    messageSet.forEach(function (m) {
        console.log('topic received: ');
        console.log({
            'topic':topic,
            'partition': partition,
            'offset': m.offset,
            'message': m.message.value.toString('utf8')     
        });
        message.push(m.message.value.toString('utf8'));

        console.log("Listening at " + serverUrl + ":" + port);
        server.listen(port, serverUrl);

        console.log("c");
    });
};

return consumer.init()
.then(function () {
    return consumer.subscribe('temp', 0, dataHandler);
});
k2fxgqgv

k2fxgqgv1#

您可以通过调用 server.close() .

0g0grzrc

0g0grzrc2#

你没有退出一个函数(这将是 return ,不是 break ),您告诉正在侦听端口的对象停止这样做。
如果希望服务器停止侦听新连接,请使用 close 方法。

var http = require("http");
var port = 3000;
var serverUrl = "localhost";

var server = http.createServer(function(req, res) {

  console.log("Request: " + req.url);

  var now = new Date();
  var html = "<p>Hello World, the time is " + now + ".</p>";
  res.end(html);
  server.close(); // <=======================================
  //***If you want to do something else at this point, call it from here***
});

console.log("Listening at " + serverUrl + ":" + port);
server.listen(port, serverUrl);

请注意,服务器不会立即关闭。 http.Server#close 电话 net.Server.close ,上面写着:
停止服务器接受新连接并保留现有连接。此函数是异步的,当所有连接结束并且服务器发出 'close' 事件。可选的 callback 一旦 'close' 事件发生。与该事件不同的是,如果服务器关闭时未打开,则调用该事件时将使用错误作为其唯一参数。
在我的快速本地测试中,这需要一段时间。如果您通过 'connection' 事件,并破坏连接并关闭服务器:

var http = require("http");
var port = 3000;
var serverUrl = "localhost";

var connections = [];
var server = http.createServer(function(req, res) {

  console.log("Request: " + req.url);

  var now = new Date();
  var html = "<p>Hello World, the time is " + now + ".</p>";
  res.end(html);
  connections.forEach(function(con) {   //***
      con.destroy();                    //***
  });                                   //***
  server.close();                       //***
  //***If you want to do something else at this point, call it from here***
});
server.on("connection", function(con) { //***
  connections.push(con);                //***
});                                     //***

console.log("Listening at " + serverUrl + ":" + port);
server.listen(port, serverUrl);

相关问题