Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

183
Views
Cómo contar el número de vistas en una publicación

Estoy tratando de crear un sitio web que contenga publicaciones, así que tengo un enlace "Leer más" que expande el contenido allí y allí solo como quora. ¿Cómo puedo saber el número total de veces que se ha hecho clic para poder mostrar las vistas?

Estoy usando nodejs, express y mongodb como servidor.

Este es mi archivo hbs (manillar) con ese enlace para leer más

 <p class="startPara">{{stripTags (truncate body 200)}}<span class="dots" >... </span></p> <span class="content"> <p>{{stripTags (truncate body 400)}}</p> </span> <a onclick="readMoreFunction(this)" class="buttonReadMore" >Read more</a> </div>

Este es mi archivo hbs principal que ejecuta todas las etiquetas js de su script

 <script> function readMoreFunction(el) { var parent = el.closest(".wrapper") var dots = parent.querySelector(".dots"); var contentText = parent.querySelector(".content"); var btnText = parent.querySelector(".buttonReadMore"); var startPara=parent.querySelector(".startPara"); btnText.style.display = "none"; startPara.style.display= "none"; dots.style.display = "none"; contentText.style.display = "inline"; } </script>

Ahora, un usuario único hace clic en cada publicación, por lo que solo incrementar una variable no ayudará.

Entonces, dígame cómo calcular la cantidad total de veces que se hizo clic en ese enlace para una publicación específica y luego cómo comunicarlo a la base de datos para que pueda mostrarlo en la página web.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Me imagino que necesitaría tener una propiedad de 'vistas' en su publicación en MongoDB.

Podría servir los primeros 400 caracteres para cada publicación en su solicitud de API getPosts .

Hacer clic en leer más podría llamar a getPost(id) en su API, devolviendo la carga completa de la publicación, durante ese proceso podría incrementar las vistas de publicación en uno.

Además, como @tobiv sugiere en los comentarios, podría tener un código que garantice que solo se cuenten los clics de visitantes únicos.

about 4 years ago · Juan Pablo Isaza Report

0

Almacene un objeto en la sesión de los espectadores y la columna db llamada 'viewed_posts'. Use el objeto para determinar si vieron una publicación o no.

 if (typeof(req.session.viewed_posts[post_id]) == 'undefined') { req.session.viewed_posts[post_id] = 1; //update session //increment post count in posts table with post id //update 'viewed_posts' column with new session } //select post

Cuando el objeto en 'viewed_posts' sea demasiado grande (por ejemplo, 3000 publicaciones vistas), elimínelo. Si el espectador promedio lee 2 publicaciones únicas al día, pasarán 4,5 años hasta que la segunda vista única PUEDE ocurrir en la misma publicación.

Aunque esto no garantiza la unicidad para siempre (todavía mucho tiempo), es mucho más eficiente porque...

  1. Evitas una tabla de vistas por completo

  2. El recuento de vistas en la tabla de publicaciones es un solo número (sin búsqueda)

  3. El espectador no tiene que buscar en una tabla para ver si ya vio una publicación. Solo tienen que referirse a su sesión.

Use varchar (x) Y la identificación incrementada NO el uuid para almacenar el objeto.

O (mi forma preferida)

Vaya a la inversa y almacene un objeto en la fila de la publicación, selecciónelo, analícelo, verifique si está allí, si no está allí, insértese a sí mismo y en el cliente, use object.keys para obtener cuántas vistas tiene la publicación. Cuando el objeto es demasiado grande, elimine los pares de valores clave que son los más antiguos e incremente un conteo por uno en otra columna (agregue claves y conteo) O deje de agregar pares de valores clave.

O

use una cláusula de unión cuando seleccione con la tabla de vistas

 select * from posts as p LEFT JOIN views as v ON p.post_id = post_id AND p.post_id = v.post_id AND v.view_id = my_id LIMIT 2 //if the result length is 1, insert self into views //if the result length is 2, you know that you have already viewed (don't insert) //select post view count and return result[0] from above with count

O

no use una tabla de unión con vistas

 post = select * from posts where post_id = post_id if_viewed = select COUNT(*) from views where post_id = post_id AND view_id = my_id (if count is 0 insert into views) post_views = select COUNT(*) from views WHERE post_id = post_id //return post and post_views
about 4 years ago · Juan Pablo Isaza Report

0

Siendo realistas, este es un tema muy complejo.

Ingenuo: haga clic en el botón para enviar un ping al punto final de back-end dedicado que actualiza la base de datos. Piense en múltiples clics (porque el usuario está aburrido), otras formas de leer publicaciones completas, etc.

Práctico: considere Google Analytics y tal.

No: cuente las solicitudes en el servidor. Los navegadores hacen cosas raras (solicitudes de verificación previa, vistas previas diferentes, etc.). El número de solicitudes puede no corresponder al número de vistas.

about 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!