2017-02-21 51 views
1
var e = require("./myApp.js"); 

var myServer = e.CreateServer(1337); 

myServer.Register("/", "GET", function (req, res) { res.end("J") }); 
myServer.Register("/", "GET", function (req, res) { res.end("Ja") }); 

myServer.Start(); 

这是我的 “包装”:比较2个属性 “一些”

module.exports = (function() { 

function _createServer(port) { 
    var routingTable = []; 
    var port = port; 
    var server = require('http').createServer(); 

    function _start() { 
     server.listen(port); 
     console.log("Server was started"); 
    }; 

    function RegisterRecord(url, method, fnc) { 
     this.url = url; 
     this.method = method; 
     this.fnc = fnc; 
    }; 

    function _register(newUrl, newMethod, newFnc) { 

     if (_checkInput(newUrl, newMethod)) 
      console.log("Register failed! Record with same URL and Method already exist"); 
     else { 

      routingTable.push(new RegisterRecord(newUrl, newMethod, newFnc)); 
      console.log("Register success!");      
     } 
    }; 

    function _checkInput(newUrl, newMethod) { 
     return routingTable.some(function fnc(record) { record.url == newUrl && record.method == newMethod }); 
    }; 

    return { 
     Start: _start, 
     Register: _register, 
     ShutDown: _shutDown 
    }; 
}; 

return { CreateServer: _createServer }; 

})(); 

所以最重要的功能是 “_register” 和 “checkInput”。

我的目标是只有在数组路由表中允许相同的URL和方法。所以当我执行程序时,Command Promp会打印两次注册成功。但是“/”和“GET”应该只允许一次。

如何比较URL和方法以使它们可以是唯一的?

PS:在 “包装” 是在JS文件 “./MyApp.js”

回答

1

您需要filter

function _checkInput(newUrl, newMethod) { 
    return routingTable 
      .filter(function(el) { 
       return el.url === newUrl && el.method === newMethod; 
      }) 
      .length > 0; 
}; 

UPD。当然,你可以使用some - 你只是忘记从它返回一个值:

function _checkInput(newUrl, newMethod) { 
    return routingTable 
      .some(function(el) { 
       // Need return 
       return el.url === newUrl && el.method === newMethod; 
      }) 
}; 
+0

谢谢!但有可能与“一些”使用它?或者为什么它不适用于“某些”? – igodie

+0

@igodie是的,当然,我很抱歉。我改变了答案。 –