tengo un 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>Llama al archivo 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 nodejsFunciona bien. Pero ahora quiero ejecutar Index.html en el lado del servidor.
Agregué 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'); Ahora node server.js
da error
CircleArea.js:1 Uncaught SyntaxError: Unexpected token '<' (Index):13 Uncaught ReferenceError: CircleArea is not defined at HTMLInputElement.onclick ((Index):13:6)Mi pregunta es ¿cómo debo modificar Index.html y CircleArea.js para ejecutarlo en nodejs?
Su código no tiene nada que ver con la evaluación del lado del servidor. Está utilizando Node.js como servidor web. El servidor no evalúa el código del cliente. No importa CircleArea.js . no necesitas
module.exports ={circleArea}; // This I added for nodejsy debe quitarlo. Es una exportación de módulo CommonJS y no está permitida en el código del navegador.
Un navegador web envía una solicitud de index.html . El servidor responde con el contenido de Index.html . El navegador lo evalúa. Encuentra una etiqueta de secuencia de comandos para ./CircleArea.js y envía una solicitud para este archivo. El servidor responde con el contenido de Index.html porque no hay enrutamiento en el servidor. Abra las herramientas de desarrollo en su navegador para ver el problema. El servidor responde con los mismos datos (el contenido de Index.html ) para todas las solicitudes. Tienes que implementar el enrutamiento.
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');Esta es una solución muy básica y simple. Puede usarlo para un enrutamiento muy simple. Para un enrutamiento más complejo, recomiendo un marco como Nest.js