2013-12-09 3 views
1

Пораженный проблемой маршрутизации в expressjs и проекте AngularJs.Parsing url params в expressjs - angularjs application

Это не одностраничное приложение, и я не использую никакие механизмы просмотра, такие как нефрит.

Мы просто используем простой HTML.

Я работаю над функциями сброса пароля, где пользователь может сбросить пароль, нажав ссылку, предоставленную по электронной почте. Поэтому я предполагаю, что не будет никакого события изменения маршрута в контексте Angular (Пожалуйста, поправьте меня, если я ошибаюсь).

И мои экспресс-конфигурации заключаются в следующем.

routes = require('./routes/index');  
app.configure(function() { 
    app.use(express.static(__dirname + '/app')); 
    app.use('/css', express.static(__dirname + '/app/css')); 
    app.set('views', __dirname + '/app'); 
    app.set("view options", { layout: false }); 
    app.engine('.html', require('ejs').__express); 
    app.set('view engine', 'html'); 
    app.use(express.favicon()); 
    //app.use(require('connect').bodyParser()); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 

    app.use(app.router); 

}); 


// Routes 

app.get('/', routes.index); 

app.get('/resetpassword.html/:resetcode', function (req, res) { 
    console.log("reset code: " + req.params.resetcode); 
    res.render('resetpassword.html/' + req.params.resetcode); 
}); 

app.get('/api', function (req, res) { 
    res.send('Ecomm API is running'); 
}); 

// JSON API 
app.post('/registeruser', usersApi.registerUser); 
app.post('/api/login', usersApi.logIn); 
app.post('/api/addgame', gamesApi.addGame); 

app.get('*', routes.index); 

// Start server 

app.listen(2221, function() { 
    console.log("Express server listening on port %d in %s mode", 2221, app.settings.env); 
}); 

и index.js

exports.index = function(req, res){ 
    res.render('home.html'); 
}; // Always rending index.html which needs to be fixed. 

И app.js из AnghularJs следующим

app.config(function ($routeProvider) { 
    $routeProvider 
     .when('/', { templateUrl: 'home.html' }) 
     .when('/resetpassword.html/:resetcode', { templateUrl: '/resetpassword.html', controller: 'ResetPasswordCtrl' }) 
     .otherwise({ redirectTo: '/' }); 
}); 

я получаю 500 внутренняя ошибка или просмотреть не найдена ошибка.

Любые предложения, пожалуйста.

ответ

2

Вы связываете пароль с именем вида, которое вы переходите на render, поэтому почему Express не находит представление и возвращает ошибку 500. Вы должны передать данные в качестве дополнительного параметра функции render как объект:

res.render('resetpassword.html', {resetcode: req.params.resetcode}); 

Затем в использовании вид resetcode непосредственно, например,

<span><%= resetcode %></span> 
+0

благодарит за ваш ответ. Вместо доступа к параметру из представления мы не можем его прочитать с контроллера? – Naresh

+0

Возможно, но это не зависит от рендеринга шаблона. Если url is /resetpassword.html/1234, то я думаю, что угловой контроллер сможет его прочитать, но вам не нужно передавать его на серверную функцию node.js 'render'. ИМО вы не должны выполнять маршрутизацию как на стороне сервера, так и на стороне клиента, поскольку вы выполняете маршрутизацию на стороне сервера, маршрутизация на угловой стороне кажется излишней. Btw, PLS отметить ответ, как принято, если это решает вашу проблему;) – jtblin

+0

еще раз спасибо. Но после вышеупомянутых изменений я не получаю никаких ошибок. Но я не вижу URL. Я могу просто увидеть хозяина. Есть идеи? – Naresh

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