我有一个像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')
}
}
为了完整起见,这是您需要在代码中进行更改的地方,但如上所述,不要混合使用await
和then
:
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')
}
}