【问题标题】:Accessing server side functions using Express.js and EJS使用 Express.js 和 EJS 访问服务器端函数
【发布时间】:2013-01-17 22:40:15
【问题描述】:

我正在使用 EJS 作为模板引擎在 Express.js 中运行一个测试应用程序。我想访问存储在 .js 文件中的函数来运行服务器端而不是客户端。例如,如果我有:

<%= console.log("I'm in the server console"); %>

服务器捕获控制台输出,如果我有:

<script type="text/javascript"> console.log("I'm in the client-side console"); </script>

现在,如果我有一个功能可以为客户端输出相同的内容,我可以这样包含它:

<script type="text/javascript" src="/javascripts/clientSideCode.js"> clientSideOutput(); </script>

但是我如何以这种方式包含文件及其函数,以便 EJS 可以执行服务器端代码?看来 express 中的public 文件夹仅用于客户端代码。

【问题讨论】:

  • 查看辅助函数。

标签: node.js express ejs


【解决方案1】:

您可以使用node.jsSocket.IO 在客户端和服务器之间发出实时事件。例如,客户端会执行以下操作:

<script>window onload = function() {

socket.emit('request_customer_list', { state: "tx" });

socket.on('receive_customer_list', function(data) {
$.each(data.customer_list, function(key, value) {

  socket.set(key, value); // store the customer data and then print it later
});

});}

在您的服务器上,您可以有一个例程来加载客户列表并以类似的格式发回:

socket.on('connection')
  socket.on('request_customer_list', function(data){
   state = data.state;
   var customer_list;
   // pretend i loaded a list of customers from whatever source right here
   socket.emit('receive_customer_list', {customer_list: customer_list});
)} )};

【讨论】:

    【解决方案2】:

    您可以创建模板可以通过app.locals 访问的辅助函数:

    【讨论】:

    • 我不确定这正是我想要的。这只是暴露一个对象还是整个函数。假设我有一个名为 createFile 的函数,它会在有人单击链接后在服务器上创建一个文件,我该怎么做?
    • 听起来您正在寻找路线。要在有人单击链接时在服务器上创建文件,您需要使用 ajax(或 POST 到可呈现页面)和服务器上可以创建文件的路由。
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2019-08-25
    • 2012-02-03
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多