在服务器端的 html 中调用 JS 函数(nodejs)

沙吉

我有一个 index.html

    <!DOCTYPE html>
<html>
    <head>
        <title>Server-side Example</title>
        <script src="./CircleArea.js"></script>
            </head>
    <body>
        <input
        id="ftpd"
        type="button"
        value="Calculate"
        onclick="CircleArea()"
        />
    </body>
</html>

它调用 CircleArea.js 文件。

const PI = 3.14
let radius = 3;

    function circleArea(){
         var inputField = document.createElement("INPUT");
         inputField.setAttribute("type", "text");
         inputField.setAttribute("value", (PI*radius*radius));
         document.body.appendChild(inputField);
    }
    
    module.exports ={circleArea}; // This I added for nodejs

它工作正常。但我现在想在服务器端运行 Index.html。

我添加了 server.js

let http = require('http');
let fs = require('fs');

let handleRequest = (request, response) => {
    response.writeHead(200, {
        'Content-Type': 'text/html'
    });
    fs.readFile('./Index.html', null, function (error, data) {
        if (error) {
            response.writeHead(404);
            respone.write('Whoops! File not found!');
        } else {
            response.write(data);
        }
        response.end();
    });
};

http.createServer(handleRequest).listen(8000); 
console.log('Server running at http://localhost:8000');

现在node server.js

给出错误

CircleArea.js:1 
        
       Uncaught SyntaxError: Unexpected token '<'
(Index):13 
        
       Uncaught ReferenceError: CircleArea is not defined
    at HTMLInputElement.onclick ((Index):13:6)

我的问题是我应该如何修改 Index.html 和 CircleArea.js 以在 nodejs 上运行它?

难的

您的代码与服务器端评估无关。您将 Node.js 用作 Web 服务器。服务器不评估客户端代码。它不导入CircleArea.js. 你不需要

module.exports ={circleArea}; // This I added for nodejs

并且应该删除它。这是一个 CommonJS 模块导出,不允许在浏览器代码中使用。

Web 浏览器发送对index.html. 服务器以Index.html. 浏览器评估它。它为这个文件找到一个脚本标签./CircleArea.js并发送一个请求。服务器响应内容为 ,Index.html因为服务器中没有路由。在浏览器中打开开发工具以查看问题。服务器对Index.html所有请求使用相同的数据(的内容)进行响应。你必须实现路由。

let http = require('http');
let fs = require('fs');

let handleRequest = (request, response) => {
  let file = 'Index.html';
  if (request.url === '/CircleArea.js') {
    file = 'CircleArea.js';
    response.writeHead(200, {
      'Content-Type': 'application/javascript',
    });
  } else {
    response.writeHead(200, {
      'Content-Type': 'text/html',
    });
  }
  fs.readFile('./' + file, null, function (error, data) {
    if (error) {
      response.writeHead(404);
      response.write('Whoops! File not found!');
    } else {
      response.write(data);
    }
    response.end();
  });
};

http.createServer(handleRequest).listen(8000);
console.log('Server running at http://localhost:8000');

这是一个非常基本和简单的解决方案。您可以将其用于非常简单的路由。对于更复杂的路由,我推荐像Nest.js这样的框架

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Node.js中从客户端调用服务器端函数(例如html按钮onclick)?

在node.js中从服务器端调用客户端函数

Node.js Javascript-从外部脚本服务器端调用函数

HTML到Node.js中的PNG服务器端

在 NodeJs 中从客户端调用服务器端函数

节点js中的date()函数提供服务器端日期还是客户端端日期?

HTML服务页面,可通过对话框调用服务器端Apps脚本函数

在服务器端使用Node JS解析HTML

服务器端呈现的HTML-> JS表?

如何使用客户端JavaScript调用服务器端NodeJS函数

从服务器端调用Javascript函数

无法调用服务器端的webmethod函数

从ReactJS组件调用服务器端函数

NodeJS中requestAnimationFrame()的服务器端实现

to_csv 函数中的服务器端加密

如何在javascript函数中调用服务器端函数

如何在java中的mapReduce中调用mongodb服务器端函数

像NodeJS这样的服务器端JavaScript中的“服务器”是什么?

下一个js-每次更改路线时在服务器端调用一个函数

我该如何编写从服务器端JavaScript调用的Java方法,该方法将JS回调函数作为参数?

如何使用expressJ将JS,CSS和其他服务器端实用程序包含到NodeJ中的HTML页面中?

在ASP.NET服务器端还是客户端中的HTML控件?

Meteor JS中的客户端和服务器端验证

Next.js:在getInitialProps()中获取数据:服务器端与客户端

动态路由在Next JS中呈现在服务器端还是客户端?

从服务器端调用立即调用函数内部的函数

将服务器端存储的javascript文件添加到html(node.js)

在HTML按钮上调用服务器端功能单击

从html按钮控件调用服务器端事件不起作用