Express.js:在用户发帖时获取用户的引荐来源网址

Express.js: Get user's referer url when they post

本文关键字:用户 js Express 获取      更新时间:2023-09-26

所以我想为我的网站创建一个评论系统,为了知道评论的页面(例如,用户上传的特定视频(,我以某种方式需要获取用户当前所在的页面的URL,当他们发表评论时(以便我知道如何将其保存在数据库中(。

路线是这样的:app.get('/video/:videoId', function(req, res){...})所以视频网址将是这样的:/video/98ux8987s987f9xc89v3wjgrkgh32 .

当用户发布评论时,我需要获取 url 的最后一部分。我不想将网址与评论一起发送(在 ajax POST 函数中(,因为他们可以更改它!

顺便说一句,我不需要 url post url(如果我在 post 函数中有类似 req.url 的东西,我只会得到 post url:app.post('/comment', function(req, res){console.log(req.url)}如果我这样做,我会得到/comment(。

有没有办法做到这一点?

谢谢。

您可以使用 url 添加哈希,但它并非不可阻挡。在视频密钥中,您可以添加日期或用户 ID。

var secretkey = "4658{=#mkZl"; // The user doesn't know this string, and he can't make videoKey.
app.get('/video/:videoId', function(req, res){    
    res.render('video', {
        videoId: req.params.videoId,
        videoKey: sha256(secretkey + req.params.videoId + secretkey);
    });
};

在您的 html 表单中:

<form action="/comment">
    <input type="hidden" name="videoId" value="{videoId}" />
    <input type="hidden" name="videoKey" value="{videoKey}" />
</form>

评论功能:

var secretkey = "4658{=#mkZl";
app.post('/comment', function(req, res){
    if (req.body.videoKey == sha256(secretkey + req.body.videoId + secretkey))
        //ok the user got video page, before he comments.
};

SHA256功能:

var crypto = require('crypto');
function sha256(data) {
    return crypto.createHash("sha256").update(data).digest("base64");
}

我不确定我是否得到你,但这是你的意思吗?

app.post('/comment/:videoId', function(req, res) {
    console.log(req.params.videoId)
}

videoId 参数位于 req.params.videoId 中。