Estoy tratando de aprender nodejs y express y creé un servidor simple. Quiero ejecutar un código JS para la respuesta.
Cuando utilicé este método, funciona.
const express = require('express'); const path = require('path'); require('dotenv').config(); const app = express(); const port = process.env.PORT || "8000"; app.get('/', (req, res) => { res.send(`<script> console.log("Program works!"); </script>`); }); app.listen(port, () => { console.log(`Listening to requests on http://localhost:${port}`); });Pero escribir JS como String es difícil, así que probé esto:
const express = require('express'); const path = require('path'); require('dotenv').config(); const app = express(); const port = process.env.PORT || "8000"; app.get('/', (req, res) => { res.send(`<script src="./response.js"></script>`); }); app.listen(port, () => { console.log(`Listening to requests on http://localhost:${port}`); });Y me sale este error:
OBTENGA http://localhost:8000/response.js net::ERR_ABORTED 404 (No encontrado)
Cuando envías esto:
<script src="./response.js"></script> al navegador, el navegador analizará eso y verá el atributo src y luego solicitará inmediatamente ./response.js de su servidor. Pero su servidor no tiene ninguna ruta para responder a esa solicitud (por lo tanto, recibe un error 404 de su servidor). Recuerde que un servidor nodejs NO sirve archivos de forma predeterminada (a diferencia de otros servidores web). Por lo tanto, debe crear rutas o middleware para cualquier cosa que desee que sirva.
Por lo tanto, debe agregar una ruta a su servidor que responda a una solicitud de response.js . Primero cambie su etiqueta <script> a esto:
<script src="/response.js"></script> Desea que la solicitud sea "ruta absoluta" para que no dependa de la ruta de la página contenedora. Luego, debe agregar un controlador de ruta para response.js a su servidor.
Esto se puede hacer como una sola ruta:
app.get('/response.js', (req, res) => { res.sendFile("response.js", {root: __dirname}); }); O bien, puede usar express.static() para servir un directorio completo de archivos disponibles públicamente con una línea de código (si también mueve todos los archivos estáticos disponibles públicamente a su propio directorio lejos de los archivos de su servidor).