从外面呼叫功能

时间:2017-05-04 19:46:52

标签: node.js

我正在使用此代码创建一个侦听特定端口和ip

的服务器
function notifier() {

        var net = require('net');
        var host = 'x.x.x.x';
        var port = xxxx;

        var server = net.createServer(function (socket) {
            socket.on('data', function (data) {
                console.log("data " + data.toString());
            });

            socket.on('close', function (data) {
                console.log('closed');
            });

            socket.on('error', function (err) {
                console.log(err);
            });

        });

        function startServer() {
            server.listen(port, host, function () {
                console.log('started');
            });
        }

        function stopServer() {
            server.close(function () {
                console.log('stopped');
            });
        }

        startServer();
    }

我还创建了一个startServer和stopServer函数。

如果我调用函数通知器()然后服务器启动但我无法弄清楚如何在函数通知器()之外调用stopServer函数

也许我在这里犯了一个大错,而且我不能在其他地方称它,那么也许有人可以指出我应该如何做正确的方向。

2 个答案:

答案 0 :(得分:1)

JavaScript函数中的Sincé是第一类,你可以返回stopServer从其他地方调用它。

function notifier(){
 function stopServer(){
      ....
 }
 return stopServer; // note that we do not call the function, just return it
}

var x = notifier();
x(); // calls stopServer

答案 1 :(得分:1)

你可以使用'notifier()'函数作为工厂方法并返回一个接口对象来与服务器实例通信,就像这样...

function notifier() {

    var net = require('net');
    var host = 'x.x.x.x';
    var port = xxxx;

    var server = net.createServer(function (socket) {
        // ... omitted for brevity
    });

    return {
        startServer() {
            server.listen(port, host, function () {
                console.log('started');
            });
        },
        stopServer() {
            server.close(function () {
                console.log('stopped');
            });
        } 
    }
}

let server = notifier();
server.startServer();
server.stopServer();