gpt4 book ai didi

javascript - Node.js/Express - 找不到页面时呈现错误

转载 作者:IT老高 更新时间:2023-10-28 22:02:52 27 4
gpt4 key购买 nike

我在 Node.js 中有以下 Controller /路由定义(使用 Express 和 Mongoose)。当用户请求一个不存在的页面时,处理错误的最简单最合适的方法是什么?

  app.get('/page/:pagetitle', function(req, res) {
Page.findOne({ title: req.params.pagetitle}, function(error, page) {
res.render('pages/page_show.ejs',
{ locals: {
title: 'ClrTouch | ' + page.title,
page:page
}
});
});
});

它目前破坏了我的应用程序。我相信因为我没有对错误做任何事情,我只是将它传递给 View ,就像成功一样?

TypeError: Cannot read property 'title' of null

非常感谢。

最佳答案

查看 express error-pages例子。原则是首先注册您的应用程序路由,然后为所有其他未映射到路由的请求注册一个 catch all 404 处理程序。最后注册一个500的handler,如下:

// "app.router" positions our routes 
// specifically above the middleware
// assigned below

app.use(app.router);

// Since this is the last non-error-handling
// middleware use()d, we assume 404, as nothing else
// responded.

app.use(function(req, res, next){
// the status option, or res.statusCode = 404
// are equivalent, however with the option we
// get the "status" local available as well
res.render('404', { status: 404, url: req.url });
});

// error-handling middleware, take the same form
// as regular middleware, however they require an
// arity of 4, aka the signature (err, req, res, next).
// when connect has an error, it will invoke ONLY error-handling
// middleware.

// If we were to next() here any remaining non-error-handling
// middleware would then be executed, or if we next(err) to
// continue passing the error, only error-handling middleware
// would remain being executed, however here
// we simply respond with an error page.


app.use(function(err, req, res, next){
// we may use properties of the error object
// here and next(err) appropriately, or if
// we possibly recovered from the error, simply next().
res.render('500', {
status: err.status || 500
, error: err
});
});

关于javascript - Node.js/Express - 找不到页面时呈现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7641622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com