当访问一个不存在的路由时,我们通常期望看到一个 404 页面而不是默认的错误信息。在 Express.js 中,处理 404 页面并不是一项困难的任务,本文将会介绍几种实现的方法。
使用中间件处理 404
在 Express.js 中,我们可以通过中间件来捕获请求并返回指定的 404 页面。下面是一个示例代码:
app.use((req, res, next) => { res.status(404).render('404', { url: req.originalUrl }); });
上面的代码中,我们使用 app.use
方法注册了一个中间件函数,它接受三个参数:请求对象、响应对象和下一个函数。如果这个中间件函数被调用,意味着页面不存在,我们就可以使用 res.status(404)
方法来设置响应状态为 404,然后使用 res.render
方法来显示 404 页面。在渲染 404 页面时,我们向模板传递了一个 url
参数,它表示原始请求的 URL。
使用 catch-all 路由
除了中间件,我们还可以使用 catch-all 路由来处理 404 页面。下面是一个示例代码:
app.get('*', (req, res) => { res.status(404).render('404', { url: req.originalUrl }); });
上面的代码中,我们使用 app.get
方法注册了一个路由,它匹配所有路径并处理 404 页面。与中间件方式相比,这种方式的差别在于我们使用 get
方法而不是 use
方法来注册路由。
自定义错误处理器
最后,我们还可以使用自定义错误处理器来处理 404 错误。下面是一个示例代码:
app.use((err, req, res, next) => { if (err.status === 404) { res.status(404).render('404', { url: req.originalUrl }); } else { next(err); } });
上面的代码中,我们注册了一个错误处理器函数,它接受 4 个参数:错误对象、请求对象、响应对象和下一个函数。在处理错误时,它首先检查错误对象的状态是否为 404。如果是,就使用 res.status(404)
方法来设置响应状态为 404,然后使用 res.render
方法来显示 404 页面。否则,就调用 next
方法将错误传递给下一个错误处理器或中间件。
总结
在 Express.js 中处理 404 页面并不是一项困难的任务,我们可以使用中间件、catch-all 路由或自定义错误处理器来实现。在实际开发中,我们需要根据具体情况来选择最合适的方式。如果您有其他好的方法,欢迎分享!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e99527f6b2d6eab34d1db3