【发布时间】:2021-08-19 02:25:35
【问题描述】:
我有一个 MEAN 堆栈应用程序并使用 Node.js 和 Express.js 作为后端 API。
假设我有如下的“cmets”路线
/* GET /comments listing. */
router.get("/", function(req, res, next) {
Comment.find(function(err, comments) {
if (err) return next(err);
res.json(comments);
});
});
并像这样在我的服务器中使用它:
var commentsRouter = require('./routes/comments');
...
app.use('/comments', commentsRouter);
我的问题是:有没有办法阻止用户在浏览器中访问 http://mrUrl/comments 并拒绝带有可能 403 Forbidden 消息的请求,但同时 JavaScript 文件尝试访问相同的 URL 会收到一条内容消息(在例子应该是res.json(comments);)
另外,是否有可能对所有路由启用一次这样的限制,而不是对每个路由启用。
【问题讨论】:
-
Javascript 将在浏览器上运行,因此您只能从浏览器获取请求。为了防止仅仅通过在地址栏中输入 url 在浏览器中获取结果,您需要将此请求作为 POST 请求。
-
“您需要将此请求作为 POST 请求发出”是什么意思?意思是?对于不同的模型,有几个具有不同 HTTp 动词的路由处理程序和中间件。我不太明白你的意思。
-
像下面的例子,router.post('\',handler)。这样就无法从浏览器地址栏中获取数据。您还可以检查传入请求中的标头,以确保像下面由@Omer Shukar 提供的示例