加载不同的EJS,具体取决于网址

时间:2016-06-20 06:58:07

标签: javascript angularjs node.js express ejs

如果URL包含'todos',例如'... / todos / *',他应该加载不同的EJS模板(todos.ejs)。如果URL不包含'todos',则正常的index.ejs将加载。

我尝试了类似下面的内容,但我认为使用app.get是错误的。

if (req.url.indexOf("todos") >= 0) {
    app.get('/todos/*', function(req, res) {
        res.render('todos', {
            title: 'todos page'
        });
    });
} else {
    app.get('/', function(req, res) {
        res.render('index', {
            title: 'index page'
        });
    });
}

3 个答案:

答案 0 :(得分:3)

您可以将regular expressions to match URL paths与Express一起使用,所以:

// Match any URL with '/todos/' in the path:
app.get(/\/todos\//, function(req, res) {
  res.render('todos', { title: 'todos page' });
});

// Match the rest:
app.get('*', function(req, res) {
  res.render('index', { title: 'index page' });
});

如果您不关心“todos ”周围的斜线,匹配将变为:

app.get(/todos/, ...);

请注意,声明路由处理程序的顺序很重要:您希望最先声明最具体的匹配(“todos”),最后声明最少(“其余”)。

答案 1 :(得分:2)

就是这样的。

app.get('*', function(req, res) {
    if (req.url.indexOf("todos") >= 0) {
        return res.render('todos', {
           title: 'todos page'
        });
    } 

    res.render('todos', {
        title: 'todos page'
    });
});

答案 2 :(得分:2)

试试这个

app.get('*', (req, res) => {
  if (req.url.indexOf('todos') === -1) {
    return res.render('index', { title: 'index page'})
  } 
  else {
    return res.render('todos', { title: 'todos page' })
  }
})