2017-02-21 81 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是的,當然,我很抱歉。我改變了答案。 –