如何防止nodejs expresjs上的get路由冻结



我有一个像http://localhost:3000/admin/video/edit/5这样的路由控制器是这样的

albumEdit: async (req, res) => {
const editInfoId = req.params.id;
await Movie.findOne({ where: { id: editInfoId } }).then((movie) => {
if (movie) {
res.render('admin/movies/edit', { title: 'Edit Movie On Page One', movie });
}
});
},

用于测试目的,当我在edit/之后输入错误的id时,然后进程在一段时间后冻结,我得到500个错误。

如果有人试图在URL中使用错误的id来破坏我的应用程序,如何防止这种情况?我想要这样的东西,如果有人试图做这个应用程序重定向到一个错误页面。

我是新的节点js express js我需要一些信息。

如果movie为假或fineOne导致错误,您的路由将冻结,因为对于这两种情况,您都不发送任何响应。

一段时间后,我得到500个错误。

如果你的节点服务器运行在web服务器后面,那么这个500是由于超时,因为你的路由器没有发送响应。

如果有人试图在URL中使用错误的id来破坏我的应用程序,如何防止这种情况?我想要这样的东西,如果有人试图做这个应用程序重定向到一个错误页面。

与任何编程语言或代码一样,确保处理所有控制流和可能的异常。

除此之外,如果你使用await,你在大多数情况下都不想使用.then

albumEdit: async (req, res) => {
const editInfoId = req.params.id;
try {
let movie = await Movie.findOne({
where: {
id: editInfoId
}
})
if (movie) {
res.render('admin/movies/edit', {
title: 'Edit Movie On Page One',
movie
});
} else {
// either the if is not necessary or you have to also handle the else cases

// send some error response
res.send('error')
}
} catch (err) {
// send some error response
res.send('error')
}
}

为了完整起见,这是您需要在代码中进行更改的地方,但如上所述,不要混合使用awaitthen:


albumEdit: async (req, res) => {
const editInfoId = req.params.id;
try {
await Movie.findOne({
where: {
id: editInfoId
}
}).then((movie) => {
if (movie) {
res.render('admin/movies/edit', {
title: 'Edit Movie On Page One',
movie
});
} else {
// either the if is not necessary or you have to also handle the else cases

// send some error response
res.send('error')
}
});
} catch (err) {
// send some error response
res.send('error')
}
}

相关内容

  • 没有找到相关文章

最新更新