2014-01-30 2 views
1

Я пытаюсь создать приложение, используя nodejs и express. В настоящее время у меня возникла странная проблема.Ошибка 500 при использовании маршрутов в Express

Вот как это выглядит так далеко:

var express = require('express'); 
var routes = require('./routes'); //here I have all functions for routing 
app.use(app.router); 
app.get("/", routes.index) 
    .get("/login", routes.login) 
    .get("/restricted/menu", routes.menu) 
    .get("/restricted/myapp", routes.datePicker) //I send to a page where the user select a date 
    .get("/restricted/myapp/:datetoget", routes.myapp) //after selecting the date, the user is redirected to a URL like this : /restricted/myapp/2014-01-30 
    .use(route.allOther); 
    .... 

Проблемы появляются, когда я пытаюсь достигнуть страницы:

хост/ограниченный/MyApp/

без заполнения "datetoget" параметр. Это консоль, когда я пытаюсь попасть на эту страницу

HTTP Express server listening on port 3000 
undefined 
GET /restricted/myapp/ 500 8ms 

Как только я положил что-то после того, как MYAPP/она работает (например:/хоста/ограничено/MYAPP/что-то). Вот часть кода для функции routes.myapp:

function(req,res){ 
    console.log('into myapp'); //this step seems not to be reached 
    var date; 
    if(req.params.datetoget){ 
     date = new Date(req.params.datetoget); 
     if(!utilities.isDate(date)){ 
      date = new Date(); 
     } 
    }else{ 
     date = new Date(); 
    } 
    ... 
} 

Это также кажется, что последний

.use(routes.allOther) 

не работает, потому что я Gent стандартный 500 экспресс страницу ошибки. Я также попытался поставить новый маршрут как этот

.get('/restricted/myapp/', routes.myapp) 

Это не решит проблему.

Только в случае, если это routes.datePicker

var notInDir = true; 
for(var dirKey in directories){ //directories is an object where I store string of directories 
    var dir = directories[dirKey]; 
    if(req.originalUrl === dir.ref){ //The origin must be known 
     var datePicker = { 
       title:"Select the date", 
       jsFile: [array of Javascript needed files], 
       cssFile: [array of css needed files], 
       mode: "datebox", 
       ref: req.originalUrl 
      }; 
     res.render("/restricted/datepicker.ejs",datePicker); 
     notInDir = false; 
    } 
} 
if(notInDir){ 
    throw "Error"; 
} 

Я немного потерял до сих пор и небольшая помощь будет признателен :-) Спасибо много.

+0

Вы можете показать 'routes.datePicker'? –

+0

Вы должны указать более конкретные маршруты, перечисленные перед общими маршрутами. Попробуйте переместить app.get для «/ limited/myapp /: datetoget» выше «/ limited/myapp» –

+0

Здравствуйте, я только что редактировал сообщение. @Hector Корреа: Я согласен с вами, но, к сожалению, порядок ничего :( – Caktus

ответ

0

Кажется, что курьерская считает этот маршрут:

/restricted/myapp 

и этот маршрут:

/restricted/myapp/ 

как же. Таким образом, функция называется route.datePicker. Но в моем случае начало (/ limited/myapp /) не было определено в '' directory '', только было/ограничено/myapp, поэтому исключение - это throw.

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