Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 解析expressjs-angularjs应用程序中的url参数_Node.js_Angularjs_Express_Routing - Fatal编程技术网

Node.js 解析expressjs-angularjs应用程序中的url参数

Node.js 解析expressjs-angularjs应用程序中的url参数,node.js,angularjs,express,routing,Node.js,Angularjs,Express,Routing,在expressjs和AngularJs项目中遇到路由问题 它不是一个单页应用程序,我也没有使用任何视图引擎,比如jade 我们只是使用普通的HTML 我正在开发密码重置功能,用户可以通过单击电子邮件提供的链接重置密码。因此,我假设在Angular的上下文中不会发生任何路由更改事件(如果我错了,请纠正我) 我的express配置如下所示 routes = require('./routes/index'); app.configure(function () { app.use(

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

它不是一个单页应用程序,我也没有使用任何视图引擎,比如jade

我们只是使用普通的HTML

我正在开发密码重置功能,用户可以通过单击电子邮件提供的链接重置密码。因此,我假设在Angular的上下文中不会发生任何路由更改事件(如果我错了,请纠正我)

我的express配置如下所示

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个内部错误或视图未找到错误


请提供任何建议。

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

res.render('resetpassword.html', {resetcode: req.params.resetcode} );
然后在您看来,直接使用
resetcode
,例如

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


谢谢您的回复。我们不能从视图中访问参数,而不是从控制器中读取它吗?也许,但这与模板呈现无关。如果url是/resetpassword.html/1234,那么我猜Angular controller将能够读取它,但您不需要将其传递给服务器端node.js
render
函数。在我看来,您不应该同时在服务器端和客户端执行路由,就像在服务器端执行路由一样,在角度端执行路由似乎是多余的。顺便说一句,如果这解决了您的问题,请将答案标记为已接受;)再次感谢。但是经过以上的改变,我没有得到任何错误。但是我看不到网址。我只能看到主人。知道吗?我想我已经解决了另一个问题,那就是修改url。我有一个客户端路由,它将路由设置为“/”。我还在想办法让参数有角度。酷,我也是这么想的。正如我所说的,你们可能不应该在角度方面使用路线。只需分别为每个teamplate提供相应的控制器代码。另外,请将答案标记为已接受,因为它解决了您的问题;)