Javascript Express js,如何匹配所有路线,甚至子路线

Javascript Express js,如何匹配所有路线,甚至子路线,javascript,node.js,express,handlebars.js,Javascript,Node.js,Express,Handlebars.js,我正在构建一个node js应用程序,它需要返回404页面,用于除/video路由之外的所有路由 app.get('/video/*', Video.show) app.get('*', (req,res) => res.render('not_found')) 如果URL没有子目录,则此操作有效。 当有人输入带有子目录(如/hello/subhello/)的URL时,就会出现问题。这不是我的路线 我已经尝试了这些选项,但没有成功: app.get('/*', (req,res) =&g

我正在构建一个node js应用程序,它需要返回404页面,用于除
/video
路由之外的所有路由

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')

这里有一个工作演示:

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的回复。如果你去别的地方,你会得到找不到的东西

编辑:
添加了车把代码,与您的相同。仍然可以正常工作。

如果您不知道要找什么,则必须执行
app.use()
。然后,您可以使用
req.url
或其部分来创建自己的逻辑
req.method
将告诉您是否是
GET
POST
,等等。我已经尝试过了。它仍然没有抓住它。即使我只是说
app.use((req,res)=>res.redirect('not_found'))
如果你在这个函数中放了一个控制台日志,你能做到吗?如果没有,您必须在它到达之前重定向或响应。另外,
not\u found
是您拥有的视图的名称吗?你有什么错误吗?如果你贴出一个小的复制脚本会有帮助的。我用把手作为引擎。“未找到”是我可以渲染的视图之一。无论何时我在
/video/*
路线中使用它,它都可以正常工作。如果请求的视频不在那里,我将渲染“未找到”,这样可以正常工作。此外,我尝试放置一个console.log,它会多次打印内容,就像它被重定向到那里很多次一样。为什么会这样?我只是渲染了一部分。谢谢!我做了一个类似的演示,效果很好。我猜是车把的设置引起了这个问题。重要的是你把中间产品放在哪个顺序上。在这个演示中很明显,但在更大的应用程序中可能会很麻烦。好的,如果我删除设置把手的代码,一切都会正常工作。我将编辑我的问题以反映这一点