如何防止在nodejs expressjs中冻结获取路由

how to prevent freezing get route on nodejs expresjs

我有一条类似 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 破坏我的应用程序,如何防止这种情况发生?如果有人尝试将此应用程序重定向到错误页面,我想要类似的东西。

我是 node js express js 的新手,我需要一些信息。

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

after some time I am getting 500 errors.

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

how to prevent this if someone tries to break my app with the wrong id in the URL? I want something like if anyone tries to do this application redirect to an error page.

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

除此之外,如果您使用 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')
     }
   }