提问者:小点点

如何在Express.js中保护敏感路由


因此,我正在构建一个运行express js的node js应用程序,并在app.js中设置如下路由:

router.get("/db/:dbName", (req, res) => {
            var dbName = req.params.dbName
            if (dbName) {
                var coll = db.collection(dbName);
                coll.find().toArray()
                    .then(results => {
                        res.send(results);
                    })
                    .catch(err => {
                        console.error(err)
                    })
            } else {
                console.log("put a dbName")
            }

        })

它只需单击一个按钮,就会从mongodb数据库中读取并输出“dbname”集合中的文档。 然后,我想到了转到一个单独的选项卡并键入“localhost:3000/db/collection”,当然,它在没有按钮的情况下仍然可以工作(即它返回集合中的所有文档)。 我的问题是,有什么方法可以防止这种行为,实质上,只有当你使用按钮时,才可以访问路线。


共1个答案

匿名用户

您可以使用一个中间件,通过单击按钮查找传递的值。 如果该值没有传递给服务器,则可以检查该值并相应地采取操作


function middleware(req, res, next) {
 if(req.value) {
   next()  
 } else {
   return "Some error"
 }
}

app.route('/route', middleware, function(req, res) {})

进一步查看https://expressjs.com/en/guide/using-middleware.html