2013-09-28 1 views
1

Я знаю, что там много рамок маршрутизатора Node JS, но я пытаюсь начать с квадрата и изучать концепцию, а не повторять код. Короче говоря, мой чрезвычайно простой маршрутизатор работает частично, но имеет некоторые проблемы. Вот код.Простые проблемы с маршрутизатором NodeJS - заявление о несостоятельности дела?

function serverStart(urlRoute) { 
    function onRequest(request, response) { 
     var pathname = url.parse(request.url).pathname; 
     console.log("Request received for " + pathname + "."); 

     urlRoute(pathname, request, response); 

     response.end(); 
    } 

    http.createServer(onRequest).listen(8888); 
    console.log("Server has started."); 
} 

код маршрутизатора:

function urlRoute(pathname, req, res) { 
     console.log(pathname) 
    switch(pathname) { 
     case '/': 
      console.log("Request for path '/'"); 
      res.writeHead(200, {"Content-Type": "text/plain"}); 
      res.write("In Index!"); 
     case '/start': 
      console.log("Request for path '/start'"); 
      res.writeHead(200, {"Content-Type": "text/plain"}); 
      res.write("In Start!"); 
     case '/foo': 
      console.log("Request for path '/foo'"); 
      res.writeHead(200, {"Content-Type": "text/plain"}); 
      res.write("In Foo!"); 
    default: // Default code IS working 
      console.log("404"); 
      res.writeHead(404, {"Content-Type": "text/plain"}); 
      res.write("Default 404"); 
    } 
} 

по умолчанию и/или 404 секция работает нормально, но другие этого не делают. В принципе, если я запрашиваю индексную страницу «/», то все сообщения о случаях загораются, и аналогичным образом следующий случай срабатывает сам и все под ним. Итак, «/ foo» срабатывает «foo» и выписывает 404 на консоль, но я не получаю 404 страницы (если, конечно, я вообще не использую плохой URL).

Попытка понять, почему случай не выглядит корректно. Любая помощь будет оценена!

ответ

0

Вам не хватает break заявлений между вашими статьями case. Операторы JavaScript switch заимствуют свое поведение от C и других подобных языков, а поведение «провала» - это то, как он должен работать (хотя это может показаться ужасной идеей).

Таким образом:

switch(pathname) { 
    case '/': 
     console.log("Request for path '/'"); 
     res.writeHead(200, {"Content-Type": "text/plain"}); 
     res.write("In Index!"); 
     break; 
    case '/start': 
     console.log("Request for path '/start'"); 
     res.writeHead(200, {"Content-Type": "text/plain"}); 
     res.write("In Start!"); 
     break; 
    case '/foo': 
     console.log("Request for path '/foo'"); 
     res.writeHead(200, {"Content-Type": "text/plain"}); 
     res.write("In Foo!"); 
     break; 
    default: // Default code IS working 
     console.log("404"); 
     res.writeHead(404, {"Content-Type": "text/plain"}); 
     res.write("Default 404"); 
} 
+0

Совершенная. Вот и все. Спасибо. И да, не думал, что перерыв был необходим! – ccdrm

Смежные вопросы