En mi controlador de ruta, paso un objeto (el objeto es el resultado de una consulta SELECCIONAR a la base de datos) a mi archivo ejs que se representa de la siguiente manera:
const query = await pool.query('SELECT * FROM table'); const obj = query.rows(); response.render('/ejspage', { obj: obj });En mi archivo ejs, intento asignar este objeto a una variable y recorrerlo:
<script> var data = '<%= obj %>'; data.forEach(function(o) { console.log(o); } </script> Esto provoca el siguiente error: Uncaught TypeError: obj.forEach is not a function
He intentado usar JSON.parse(obj) pero esto da como resultado el siguiente error Uncaught SyntaxError: Unexpected token o in JSON at position 1
También probé JSON.stringify(obj) para resolver el error sin suerte
Cuando imprimo la variable console.log(obj) obtengo:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] Sé que puedo usar javascript incrustado en ejs (cuando hago esto, puedo usar forEach() en obj muy bien) pero para mi propósito específico me gustaría hacerlo de la manera que se muestra (es decir, dentro de las etiquetas <script> ).
necesita usar JSON.stringify y JSON.parse
<script> var data = JSON.parse('<%= JSON.stringify(obj) %>'); data.forEach(function(o) { console.log(o); } </script> Descubrí que, en algunos casos, el JSON parse JSON de JSON stringify todavía daba error y me inspiré en una publicación que analizaba cookies.
<script> var data = JSON.parse(decodeURIComponent('<%=encodeURIComponent( JSON.stringify(data) ) %>')) data.forEach(function(o) { console.log(o); } </script> una alternativa es usar res.cookie pero está limitada a 4 MB