Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call a node.js function inside an html file

This is most likely a repeated question.

The closest I got to an answer was here: execute a Nodejs script from an html page?

Yet, I still can't understand.

So here's the situation:

I have an express server setup with the following files:

  • Express App

    server.js index.html

and right now I want the html folder to have a button, that calls a function set in the node.js file.

Tell me if more information is needed, thanks!

EDIT: Im remaking the question to be more clear.

I am using an express server to present a website, that present a button saying " Power Off", I want this button to be able to execute an action on my server computer, that action being a terminal command to power it off.

I wanted to know how could I make said button, written in HTML, hosted on the server but presented to the client, to interact with the server.js file hosted on the server, which would have a function set to execute said command.

thanks!

like image 896
hiperbolt Avatar asked Dec 02 '22 14:12

hiperbolt


2 Answers

You need to understand a little better how the client/server architecture of a web page works and where code actually runs and how the client and server communicate with one another.

You can't call a function directly on your node.js server from an HTML file. The HTML file is in the client's browser. The node server is your web server, far away from the client's browser on different computers. Though it may seem like your HTML is on your node.js server because it's in a directory on that server, that's only where it is stored. When the browser requests that page, your node.js server sends the HTML to the client's browser and it is rendered back in the client browser and that's where the Javascript in that page runs (in the client's browser, far away from your node.js server). This is a client-server architecture. The HTML page is running on the client. The node.js server is on your server - different computers.

If you want to communicate with the node.js server from the web page, then you use Javascript in the HTML page to make an Ajax call from the Javascript in the web page to the node.js server (An Ajax call is an http request). You then configure a route in the node.js server for that specific Ajax call and you can then write code in node.js to do whatever you want to happen when that Ajax call is received. It can carry out some operation on the server, it can retrieve data and return it to the client, etc... You can optionally send data with the Ajax call (either as query parameters for a GET request or as body data for a POST request) and then the server can optionally return data back to you (often as JSON, but it can be any format you like).

like image 77
jfriend00 Avatar answered Dec 20 '22 22:12

jfriend00


I'm not an expert with Node, but I think what's happening here is blurring the lines between server and client. Even though both use JavaScript, there's a distinction. NodeJS could easily be replaced with Ruby, PHP, Java, whatever-backend-language-you-like, and this distinction would apply in the same way it does when you use JavaScript on the server. There's no differerence.

Server-side code executes on the server. Client side code executes on the client (the browser). If you need to call a NodeJS function (assuming it has to interact with the other server side code such as databases etc) then you can send a request, either via AJAX or standard HTTP, to the a route on the server and call that function within the route.

On the other hand, if the function is generic enough and doesn't involve any specific Node code then you can simply add a script tag with your JavaScript file to the index.html page.

like image 42
Luke K Avatar answered Dec 20 '22 21:12

Luke K