在expressjs中解析url params - angularjs应用程序

时间:2013-12-09 10:05:32

标签: node.js angularjs express routing

在expressjs和AngularJs项目中遇到路由问题。

这不是单页应用程序,我没有使用任何视图引擎,如jade。

我们只使用纯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.

来自AnghularJs的app.js如下

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

我收到500内部错误或查看未找到错误。

请提出任何建议。

1 个答案:

答案 0 :(得分:2)

您正在将密码连接到您传递给render的视图名称,因此Express无法找到该视图并返回500错误。您需要将数据作为附加参数作为对象传递给render函数:

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

然后在您的视图中直接使用resetcode,例如

<span><%= resetcode %></span>