Estoy tratando de adjuntar un evento de clic de mi archivo ejs, pero noté que cuando mis datos provenientes de mi base de datos tienen una "línea nueva", aparece un error que dice: Unexpected token in JSON at position 253
aplicación.js
app.get('/', async (req, res) => { return res.render('page', { data: dataArray }) });página.ejs:
<% for(let t of data) { %> <tr class="tr-<%= t.id %>"> <td><i class="fas fa-pencil-alt" onclick="editT('<%= JSON.stringify(t) %>')"></i> </td> <td><%= t.name %></td> <td><%= t.description %></td> </tr> <% } %>guion
function editT(t) { t = JSON.parse(t); console.log(t) } Cuando una descripción tiene una "nueva línea" y uso JSON.stringif(t) se rompe:
let t = '{"id":1,"name":"Lorem","description":"Lorem Ipsum is simply dummy text of the printing and typesetting industry! Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum is simply dummy text of the printing and typesetting industry. ","created_at":"2022-04-18T22:19:00.153Z"}'; console.log(JSON.parse(treatment));hay dos formas de hacer esto sin error
el primero usando <%- %> de esta manera escribirá la cadena sin escape
como esto :
<td><i class="fas fa-pencil-alt" onclick="editT('<%- JSON.stringify(t)%>')"></i></td>el segundo estaría usando codificar
<td><i class="fas fa-pencil-alt" onclick="editT('<%= encodeURIComponent(JSON.stringify(t))%>')"></i></td>el segundo también requiere que hagas
function editT(t) { t = JSON.parse( decodeURIComponent(t)); console.log(t) }