我正在构建一个节点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')
答案 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响应。如果你去其他地方,就会找不到。
编辑: 添加了车把代码,与您相同。仍然按预期工作。