Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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
Javascript 根据URL加载不同的EJ_Javascript_Angularjs_Node.js_Express_Ejs - Fatal编程技术网

Javascript 根据URL加载不同的EJ

Javascript 根据URL加载不同的EJ,javascript,angularjs,node.js,express,ejs,Javascript,Angularjs,Node.js,Express,Ejs,如果URL包含“todos”,例如“…/todos/*”,他应该加载不同的EJS模板(todos.EJS)。如果URL不包含“TODO”,则将加载normal index.ejs 我尝试了下面的方法,但我认为使用app.get是错误的 if (req.url.indexOf("todos") >= 0) { app.get('/todos/*', function(req, res) { res.render('todos', { title

如果URL包含“todos”,例如“…/todos/*”,他应该加载不同的EJS模板(todos.EJS)。如果URL不包含“TODO”,则将加载normal 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'
        });
    });
}

应该是这样的

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

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

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' })
  }
})
您可以与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' });
});
如果您不关心围绕“待办事项”的斜线,则匹配结果如下:

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

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

您可以执行*部分,稍后也可以覆盖todos部分。感谢您提供了干净的解决方案。一般来说,这是可行的,但是。。。我一直使用
/
而不是
*
,这很有效。使用
*
,express或ejs在外部脚本/样式表方面存在问题。例如,
我将
资源解释为样式表,但使用MIME类型text/html传输:http://localhost:1337/css/style.css“
@ChrisEbert,这将再次取决于声明的顺序。如果您使用
express.static()
来处理JS/CSS,请确保它是在任何常规路由之前声明的。此外,您可能应该在JS/CSS URL中使用绝对路径(以
/
开头)。