Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

315
Vistas
Escribiendo EJS en script JS dinámicamente

Estoy tratando de usar Leaflet API y almacenar los puntos guardados de mis usuarios (marcadores, círculos, polígonos) en una base de datos MongoDB.

¿Existe una forma más elegante y dinámica de escribir un script JS en una página HTML mientras se obtienen los resultados de la base de datos?

en este momento estoy obteniendo mis datos de Mongo y pasándolos a través de la solicitud Get y usándolos en la página HTML, escribiendo EJS dentro del script JS. funciona bien, pero estoy buscando una solución mejor.

Muchas gracias por tu tiempo

 // index.js router.get('/index', ensureAuthenticated, (req, res) => { var queryz = Points.find({ belongs_to: req.user._id }) queryz.exec(function (err, results) { if (err) return handleError(err); res.render('index', { user: req.user, points: results, }) }) })
 // index.ejs // looping through the points from the database to dynamically add the points // each time the map is called <% if(typeof points != "undefined") { %> // making sure user is logged in <% counter = 1 %> <% if(points.length>0){ %> <% points.forEach(p => {%> <% if(p.type == "marker"){ %> // if point is a marker marker<%=counter%> = L.marker([<%=p.coords%>], { icon: <%=p.icon%>, alt: '<%=p.popup_message%>' }).bindPopup('<%=p.popup_message%><form method="post" action="/delete_point" id="pointFORM"><input id="pointID" name="pointID" value="<%=p._id%>"><button id="submitBtn" type="submit">🚫</button></form> ').openPopup() <% counter++%> <% } %> <% if(p.type == "circle"){ %> // if point is a circle marker<%=counter%> = L.circle([<%=p.coords%>], { color: '<%=p.color%>', fillColor: '<%=p.fill_color%>', fillOpacity: <%=p.fill_opacity%>, radius: <%=p.radius%> }).bindPopup('<%=p.popup_message%>').openPopup() <% counter++%> <% } %> <% if(p.type == "polygon"){ %> // if point is a polygon marker<%=counter%> = L.polygon([<%=p.coords%>], ).bindPopup('<%=p.popup_message%>').openPopup() <% counter++%> <% } %> <% });%> <% } %> <% } %>
over 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Supongo que el espacio problemático aquí es que desea obtener dinámicamente algunos datos de su servidor e insertarlos en una página web usando Javascript en la página web.

Ante eso, tienes varias opciones:

  1. Puede hacer una llamada Ajax a su servidor y hacer que su servidor devuelva HTML completamente formado que su Javascript del lado del cliente puede insertar directamente en la página. Eso parece ser lo que ya está ilustrando en su pregunta.

  2. Puede hacer una llamada Ajax a su servidor y hacer que su servidor devuelva JSON, que su Javascript del lado del cliente puede convertir en HTML e insertarlo en la página. Puede codificar manualmente la conversión a HTML en Javascript o puede usar la representación del lado del cliente con EJS para convertir los datos en HTML usando una plantilla EJS del lado del cliente.

  3. Puede volver a cargar la página completa y dejar que el servidor muestre la página completamente nueva, presumiblemente incluyendo los datos más recientes.

Para las actualizaciones incrementales de una página, las opciones 1 y 2 son generalmente preferibles a la opción 3 y suelen ser más eficientes para todas.

La elección entre 1 y 2 es realmente solo una preferencia arquitectónica. Algunos desarrolladores de sitios de gran escala preferirían descargar la mayor cantidad posible de procesamiento al cliente y, por lo tanto, preferirían dejar que el cliente haga la representación del nuevo HTML como en la opción 2, pero eso significa que debe tener tanto la plantilla EJS como el lado del cliente. Representación EJS en la página web, que tiene más peso del lado del cliente. Entonces, eso también es una compensación.

Realmente no hay opciones que sean más simples que estas, así que si lo que tiene ahora (opción 1) funciona bien, puede quedarse con eso.

over 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda