【问题标题】:How to include an EJS file in app.js file?如何在 app.js 文件中包含 EJS 文件?
【发布时间】:2018-11-12 08:22:42
【问题描述】:

我有一个 index.ejs 文件,我在其中使用了脚本标签并编写了一些用于 dom 操作的 javascript。现在我想将此文件中的变量用于我的 app.js 文件。如何做到这一点? 为了引用 ejs 文件的变量,我们这样做:

{someVariable:value}

我只是想反之亦然,即访问在 ejs 文件的脚本标签中声明的变量到 app.js 文件。

//index.ejs

<script>
    window.onload=function(){var c = document.getElementById("city_search").options[1].value;
        console.log(c);
     };
        function changeCarousel(){
        var x = document.getElementById("city_search").value;
        console.log(x);
     }
</script>

我如何访问 app.js 中的变量 x,因为它没有在那里声明。

【问题讨论】:

  • EJS 是单向的。您根据那里的变量在 app.js 中渲染模板,然后将其传送到浏览器。浏览器没有返回值的机制。您需要为此添加一个 api。
  • @JimB。是正确的,您需要创建一个 API 端点来将数据发布回服务器,然后对其进行处理。另一种方法是在客户端和服务器之间使用 websockets 之类的东西。

标签: javascript node.js express ejs


【解决方案1】:

我如何访问 app.js 中的变量 x,因为它没有在那里声明。

你没有。不是直接的。变量x 位于客户端计算机上运行的浏览器中,对您的服务器或服务器计算机不直接可用或可见。

当您在浏览器中运行的网页中的 Javascript 中有一个变量时,将其发送到您的服务器的唯一方法是对您的服务器进行 Ajax 调用或将该值嵌入 URL 并请求在 URL 中具有该值的新页面(作为路径或查询参数的一部分)。

为了进一步了解,让我们回顾一下 EJS 文件是如何在您的 node.js 服务器上工作的。

  1. 浏览器请求页面(由您的 EJS 文件表示)。
  2. 您的服务器收到对该页面的请求。
  3. 服务器收集该页面的所有相关数据,将该数据放入一个对象中,然后呈现 EJS 页面。这将扩展 EJS 页面并将任何所需的数据合并到页面中。
  4. 呈现的 EJS 页面作为对原始 HTTP 请求的响应发送到浏览器。
  5. 浏览器接收到现在的 HTML 页面(渲染的 EJS 页面),解析它并显示它。
  6. 浏览器解析并运行页面中的任何脚本标签。

在浏览器中运行脚本时,它们是与您的服务器完全分开的环境。它们在浏览器中的客户端计算机上运行,​​而不是服务器计算机。要与服务器共享来自网页的数据,您必须启动与服务器的一些通信并向服务器发送一些数据。有很多方法可以做到这一点。例如,您可以对服务器进行 Ajax 调用,将来自网页的数据发送给它,让服务器接收到该 Ajax 请求,然后发回响应。然后,您的客户端 Javascript 将返回该 Ajax 响应,然后可以对结果执行任何操作(将其插入网页、加载不同的页面、将其显示给用户等...)。


如果您更具体地告诉我们您要如何处理价值 x,那么我们可以就如何实现这一目标提出更详细的建议。

【讨论】:

  • 我想在 app.js 中编写的 sql 查询中传递变量的值
  • @Apoorv - 在您的服务器上创建一个路由,您可以从您的网页向其发送 Ajax 调用,并将 x 的值作为查询参数,然后您的服务器将解析查询参数,在 sql 查询中使用它并将 sql 查询的结果作为对客户端 Ajax 调用的响应返回。这就是 Ajax 的用途。
  • 感谢您的回复。我会努力做到的。
  • 我研究了很多,但做了任何教程或资源来实现这一点。请告诉我该怎么做。
猜你喜欢
  • 1970-01-01
  • 2018-05-10
  • 2018-01-02
  • 2017-02-17
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多