我使用NodeJS,Express和Handlebars(模板引擎)来构建Web应用程序。目前,我正在尝试在用户输入不存在的URL时(或者他们可能无法访问它时)自动重定向用户。
以下命令返回索引页:
router.get('/', (req, res) => {
res.render('index/index');
});
但我怎么做这样的事情:
router.get('/:ThisCouldBeAnything', (req, res) => {
res.render('errors/404');
});
以下示例来自Github:
说我输入此网址:
https://github.com/thispagedoesnotexist
它会自动返回404.如何在我的应用程序中实现它?
提前致谢。
答案 0 :(得分:2)
在所有路由处理程序之后使用中间件来捕获不存在的路由:
app.get('/some/route', function (req, res) {
...
});
app.post('/some/other/route', function (req, res) {
...
});
...
// middleware to catch non-existing routes
app.use( function(req, res, next) {
// you can do what ever you want here
// for example rendering a page with '404 Not Found'
res.status(404)
res.render('error', { error: 'Not Found'});
});
答案 1 :(得分:0)
完成所有其他路线后,您可以添加:
app.get('*', (req, res) => {
res.render('errors/404');
});
或者,您可以在所有其他中间件和路由之后使用中间件功能。
app.use((req, res) => {
res.render('errors/404');
});
所以你最终会得到一些看起来像的东西:
//body-parser, cookie-parser, and other middleware etc up here
//routes
app.get('/route1', (req, res) => {
res.render('route1');
});
app.get('/route2', (req, res) => {
res.render('route2');
});
//404 handling as absolute last thing
//You can use middleware
app.use((req, res) => {
res.render('errors/404');
});
//Or a catch-all route
app.get('*', (req, res) => {
res.render('errors/404');
});
答案 2 :(得分:0)
我看到你有明确的标签。您所要做的就是包含一个包含
的默认处理程序app.get('*', (req, res,next) => {
res.status(404).render('error.ejs')
});
例如
import numpy as np
a = []
for x in range(1,6):
for y in range(1,6):
a.append([x,y])
a = np.array(a)
print(f'Type(a) = {type(a)}. a = {a}')