La variable llamada 'classGroup' es una variable que se pasa durante la representación desde el archivo del servidor, y se usó bien en el código html en el archivo ejs usando la sintaxis ejs ( <%= %>), y también se usa en el script etiqueta en el mismo archivo ejs.
Además, dado que esta variable fue paginada usando paginate() en el lado del servidor, la matriz de datos se incluye en los documentos.
Si usa la sintaxis ejs ( <%= %>) para escribir esta variable classGroup dentro de la etiqueta del script, no se reconoce la 'i' que contiene.
¿Cómo puedo hacer que 'i' funcione incluso dentro de <%= %>?
<script> let len = <%=classGroup.totalDocs%>; for(let i = 0 ;i < len;i++) { let chunk = <%= classGroup.docs[i].weight %>; // If I put a number in place of 'i', it works, but 'i' doesn't work. console.log('weight : ' + chunk); } </script>No ha definido i dentro de ninguna etiqueta ejs, por lo que ejs no sabe nada sobre i . En palabras simples, no puede usar datos renderizados con i dentro de etiquetas ejs. Lo que puede hacer es asignar datos representados a las variables de JavaScript antes del bucle for e implementar el bucle for sin ninguna etiqueta ejs
<script> let classGroup = <%- classGroup -%>; // use <%- instead of <%= let len = classGroup.totalDocs for (let i = 0; i < len; i++) { let chunk = classGroup.docs[i].weight; console.log('weight : ' + chunk); } </script> Para asignar classGroup a una variable de JavaScript, debe representarlo como una cadena JSON. Así que dentro de tu controlador tienes que usar esto
res.render("ejs-file", {classGroup: JSON.stringify(classGroup)});
Espero haberte ayudado.