【问题标题】:How can I access an Express app.locals variable from within a client-side Javascript file?如何从客户端 Javascript 文件中访问 Express app.locals 变量?
【发布时间】:2020-06-25 09:27:39
【问题描述】:

我是网络开发的新手,我正在开发一个用于教育目的的简单网络应用程序。我正在使用 Express、mongoDB 和 EJS。

我已经设置了一个可以正确呈现 ejs 文件的路由,并且在该文件中,我可以访问一个名为 currentUser 的值。我设置了 res.locals 以便 currentUser 可用,并且我通过将其呈现为页面顶部的文本来仔细检查。

问题是我有一个 <script src="..."> 正在处理一些逻辑,并且链接在 new.ejs 文件的底部。我正在尝试从该脚本中访问 app.locals.currentUser,但控制台给了我一个未捕获的参考错误。脚本的其余部分按预期运行,但我只是弄清楚如何从其中访问currentUser

我确信这是一个非常简单的问题,我很难找到必须是显而易见的答案。我在这里问是因为我已经搜索了几个小时,但我似乎无法以一种我能理解的方式来构建搜索查询。如何将该对象放入我的脚本中?

编辑:为清楚起见添加一些 sn-ps: 在new.ejs,我有:

<div class="container">
   <h1 class="text-center"> Create new Request for <em><strong><%= currentUser.username %></strong></em> </h1>
   <div class="row justify-content-center">
       <div class="col-12 col-lg-4">
...
<script src="/javascripts/search.js"></script>

在顶部,用户名显示得很好。但是,在我的search.js 中,我正在尝试调用

console.log("Username is: " + currentUser);

当然,这是行不通的。很明显,我正在尝试以错误的方式访问 currentUser,但我似乎无法弄清楚如何解决它。

【问题讨论】:

  • 你应该分享试图访问currentUser的sn-p
  • currentUser 是一个服务器端变量。如果您想与客户端共享值并在客户端执行一些条件渲染,请注意这听起来像是潜在的漏洞。在服务器上渲染这个条件并只将结果发送给客户端会更安全。
  • @MattD.Webb 我继续添加了一些 sn-ps,感谢您的提示。
  • @WiktorZychla 这正是我正在寻找的信息!您能否提供有关如何执行此操作的任何信息?
  • 如果您希望我们帮助您在服务器上处理currentUser,请粘贴您的search.js(只需一个minimal, reproducible example)。

标签: javascript node.js express ejs


【解决方案1】:

以防万一有人发现自己在这里,我正在寻找的是以下内容:

<script src="/javascripts/search.js" currentUserId=<%= currentUser._id %> currentUserName=<%= currentUser.username %>></script>

【讨论】:

    【解决方案2】:

    使用此library 设置 cookie:

    【讨论】:

    • 这些选项都不起作用,因为数据是服务器端的,而且它们都使用客户端代码。
    • 所以你不能在服务器中创建cookie?我确定有 Express 代码可以做到这一点......
    • 你可以......但不是你在回答中展示的方式。
    • 例如使用 cookie-parser:npmjs.com/package/cookie-parser
    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2023-04-09
    • 2015-03-21
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    相关资源
    最近更新 更多