2017-02-21 11 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とメソッドが配列routingTableで指定された時間だけ許可されるということです。したがって、私がプログラムを実行すると、コマンドプロンプトは2回の登録成功を表示します。しかし、 "/"と "GET"は1回だけ許可してください。

URLとメソッドを比較して一意にすることはできますか?

PS: "ラッパーは、" あなたはfilterを必要とJSファイル "./MyApp.js"

答えて

1

である:

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

感謝を!それを "some"と一緒に使うことは可能ですか?それとも、なぜ「何人か」とはうまくいかないのですか? – igodie

+0

@igodieはい、もちろん、申し訳ありません。私は答えを変えた。 –

関連する問題