• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

194
Views
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++%> <% } %> <% });%> <% } %> <% } %>
about 3 years ago · Juan Pablo Isaza
1 answers
Answer question

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.

about 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error