2017-02-21 2 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. Поэтому, когда я запускаю программу, 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 Да, конечно, извините. Я изменил ответ. –