如何使用把手将 req 参数传递给 js?

Posted

技术标签:

【中文标题】如何使用把手将 req 参数传递给 js?【英文标题】:How do I pass req params into js with handlebars? 【发布时间】:2020-08-14 05:39:03 【问题描述】:

晚安,

我现在正在制作商店页面。我需要在 fetch 调用中发送两件事,即项目列表和用户的 id。从我的 nodejs 代码中,我像这样传递我的用户 ID:

router.get('/testing', async (req, res) => 
    if (req.user) 
        let query = await User.findOne( userid: req.user.steamid )
        res.render('testing', 
            user: req.user,
            balance: (query.balance/100),
            steamid: req.user.steamid
        )
     else 
        res.redirect('/')
    
);

我的 html 文件和我的 JS 代码是分开的。在我的 HTML 中,我通常使用把手调用变量。例如:

<a class="nav-link" >Balance: $balance</a>

但是我不明白的一件事是如何在我的 JS 代码中使用这些参数?这是在外部文件中。我是否首先在 HTML 中设置变量?如果是这样,那是否意味着有人可以将其更改为说出我的身份,然后我就会失去平衡?我需要使用 bcrypt 来散列用户标识吗?真的很感激一些建议! :)

【问题讨论】:

***.com/questions/11523331/… 我有点困惑。这不只是将变量传递给车把模板吗?如果是这样,我知道该怎么做。我只是不知道如何将传递的变量传递给外部 js 代码。 【参考方案1】:

您可以在加载外部脚本之前在模板中简单地设置为 javascript 变量,它们将作为全局变量提供:

const userid = user.id;
const balance = balance;
const steamid = 'steamid';

<script src="/js/site.js" type="text/javascript"></script>
<script type="text/javascript">
  someFunctionFromSiteJsFile(userid, balance, steamid);

   // test displaying userid
   console.log('user id', userid);
</script>

至于您需要安全性的其他问题,这取决于许多不同的因素,如果没有更多详细信息,很难回答您应该对这些变量做什么,或者您是否应该使用这种技术。

【讨论】:

知道了!谢谢。关于安全性,虽然我认为我可以跳过它,但如果有人能够更改 fetch 调用请求并添加一些其他用户的 id(steam id 是公开的),它当然可能会导致一些问题。有人这样做的可能性可能很低。我能做的就是简单地使用 bcrypt 来散列 id,然后传递它。然后在我的后端代码收到 fetch 调用时对其进行验证。但我想我现在会跳过这个。因为有人能做的最糟糕的事情就是让某人不自觉地收到购买。 是的,您可以执行类似的操作,或者根据您正在执行的操作,您可以根据您在服务器上为特定用户存储的内容来验证传递给脚本的内容。再说一次,我不确定你在做什么,但听起来你有一个很好的计划。

以上是关于如何使用把手将 req 参数传递给 js?的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给从另一个控制器公开的方法

如何将参数传递给 React js 中的函数?

如何在 JS 中手动将 gclid 参数传递给 Google Analytics

将参数传递给 Node.js 异步瀑布

如何将 JS 函数的引用作为参数传递给 ExternalInterface 调用?

如何将 char* 参数传递给在 Node.js 中执行的 C 方法?