Rendi una variabile come HTML in EJS

Sto usando la libreria Forms per Node.js ( Forms ), che renderà un modulo per me sul backend in questo modo:

var signup_form = forms.create({ username: fields.string({required: true}) , password: fields.password({required: true}) , confirm: fields.password({ required: true , validators: [validators.matchField('password')] }) , email: fields.email() }); var signup_form_as_html = signup_form.toHTML(); 

La linea finale var signup_var signup_form_as_html = signup_form.toHTML(); crea un blocco di HTML che appare come tale:

 

Fondamentalmente solo una lunga stringa di HTML. Quindi provo a renderlo usando EJS e Express usando il seguente codice:

 res.render('signup.ejs', { session: loginStatus(req) , form: signup_form_as_html }); 

Ma sul rendering dell’HTML è semplicemente la stringa che ho postato sopra, piuttosto che un vero e proprio HTML (e quindi una forma che voglio). C’è un modo per rendere quella stringa di rendering come HTML effettivo usando EJS? O dovrò usare qualcosa come Jade?

Con gli ejs puoi avere

 <% code %> 

… che è un codice che viene valutato ma non stampato.

 <%= code %> 

… che è un codice che viene valutato e stampato (sfuggito).

 <%- code %> 

… che è un codice che viene valutato e stampato (non sfuggito).

Dal momento che si desidera stampare la variabile e NON uscirne, il codice sarà l’ultimo tipo (con il -<% ). Nel tuo caso:

 <%- my_form_content %> 

Per ulteriori informazioni, consultare la documentazione completa di ejs

Aggiornamento di ottobre 2017

Il nuovo sviluppo di ejs (v2, v2.5.7) sta accadendo qui: https://github.com/mde/ejs I vecchi ejs (v0.5.x, 0.8.5, v1.0.0) sono disponibili qui https: / /github.com/tj/ejs

Ora con gli ejs puoi fare ancora di più. Puoi usare:

  • Uscita di escape con <%= %> (funzione di escape configurabile)
  • Output non formattato senza escape con <%- %>
  • Modalita ‘Newline-trim (‘ newline slurping ‘) con -%> tag finale
  • Modalità ritaglio spazio bianco (sfrutta tutti gli spazi bianchi) per il controllo del stream con <%_ _%>
  • Controlla il stream con <% %>

Quindi, nel tuo caso sarà <%- variable %> dove la variable è qualcosa di simile

 var variable = "text here 
and some more text here";

Spero che questo aiuti qualcuno. 🙂

Ho avuto lo stesso problema con il rendering dell’input textarea da un editor wysiwyg salvato come html nel mio database. Il browser non lo renderà ma mostrerà l’html come testo. Dopo ore di ricerche, ho scoperto

<%= data %> dati sfuggiti mentre

<%- data %> lasciato i dati “raw” (senza caratteri di escape) e il browser potrebbe ora renderizzarli.