如何处理nodejs中的onload和onClick事件



我正在尝试将不使用node.js的应用程序转换为节点格式。

最初的应用程序仅包含一个code.js文件和index.html文件,如下所示:

<html>
<head>
  ...
  <script type="text/javascript" src="code.js"></script>
</head>
<body onload="load()">
     (...)
    <div style="position:absolute; top:250px; left:20px">
      <input type="button" onClick="init()" value="New game">
     (...)
</body>
</html>

为了将其转换为节点格式,我将index.html重命名为 views/index.ejs ,并将 js 函数替换为 ejs 引号:

<html>
...
<body onload="<%= load %>()">
     (...)
    <div style="position:absolute; top:250px; left:20px">
      <input type="button" onClick="<%=init %>()" value="New game">
     (...)
</body>
</html>

我还在代码.js文件的末尾添加了以下内容:

module.exports={
  load:load,
  init:init
}

最后,在我的app.js主节点文件中,我有以下相关代码段:

var exportedValues = require('./code.js');
app.get('/', (req,res) => {
   res.render('index.ejs',exportedValues);
});

这几乎有效:当我检查控制台时,ejs 引号确实被替换为 loadinit 函数的定义,但由于这些定义反过来使用 code.js 中定义的其他函数,浏览器不知道如何处理它们。

正确的方法是什么?

你不需要对 html 中加载的代码做任何事情;这些 EJS 语法都不是必需的。一旦你把html/ejs发送到客户端,它将像往常一样请求js资源(code.js(。如果您希望某些代码在服务器上运行以响应客户端的某些操作,则可以使用可选参数向服务器发送请求,并让服务器在完成一些工作后返回响应。

您可以查看以下资源来了解如何在客户端和服务器之间进行通信:

  • 获取接口
  • 快速路由
  • Socket.IO

最新更新