快递js,如何匹配所有路线,甚至子路线

时间:2017-05-02 18:51:44

标签: javascript node.js express handlebars.js

我正在构建一个节点js app,需要为除/video路由之外的所有路由返回404页面。

app.get('/video/*', Video.show)
app.get('*', (req,res) => res.render('not_found'))

如果URL没有子目录,则此方法有效。 当有人输入包含/hello/subhello/等子目录的URL时,就会出现问题。我的路线没有抓住这个。

我已经尝试过这些选项但没有成功:

app.get('/*', (req,res) => res.render('not_found'))
app.use((req,res) => res.render('not_found'))

我错过了什么吗?

由于

修改

当我删除代码以设置把手时,路线会按预期进行。

这是把手设置代码:

app.engine('.hbs', exphbs({
    extname:'.hbs',
    defaultLayout:'layout.hbs',
    layoutsDir: __dirname+ '/views'
  }))
  app.set('view engine', '.hbs')
  app.set('views', __dirname + '/views')

1 个答案:

答案 0 :(得分:0)

这里有一个有效的演示:

var express = require('express');
var app = express();
var exphbs  = require('express-handlebars');

app.engine('.hbs', exphbs({
  extname:'.hbs',
  defaultLayout:'layout.hbs',
  layoutsDir: __dirname+ '/views'
}))

app.set('view engine', '.hbs')
app.set('views', __dirname + '/views')

app.get(['/videos', '/videos/*'], function (req, res) {
  res.send('Hello World!');
});

app.use(function(req, res) {
    res.status(404).send('Not found')
})

app.listen(1233, function () {
  console.log('Example app listening on port 1233!');
});

无论您是访问 localhost:1233 / videos 还是 localhost:1233 / videos / * ,您都会收到Hello World响应。如果你去其他地方,就会找不到。

编辑: 添加了车把代码,与您相同。仍然按预期工作。