2017-02-14 3 views
1

Je construis une application en utilisant nodejs.Comment connecter flash pour renvoyer plusieurs messages ou un seul message avec des caractères de nouvelle ligne?

J'ai créé un formulaire et je travaille sur la validation back-end des entrées utilisateur. Fondamentalement, j'ai un var, "messages", et chaque fois que je rencontre une erreur de saisie, j'ajoute l'erreur aux messages.

var messages =""; 
errors.forEach(function(msgObject) { 
    console.log(msgObject.message); 
    messages += msgObject.message + "\r\n"; 
}) 

(je suis aussi à l'aide indicative - http://indicative.adonisjs.com/ -. Pour la validation d'erreur Il renvoie une erreur de tableau)

Je retourne les erreurs à l'utilisateur en utilisant la connexion flash

req.flash("error", messages); 

J'utilise connecter flash https://www.npmjs.com/package/connect-flash

Mon problème est que la connexion flash ne tient pas compte des caractères de nouvelle ligne. I.e., je reçois quelque chose comme:

enter image description here

Je voudrais chaque message d'erreur d'être sur une ligne distincte. Je n'arrive pas à trouver un moyen d'accomplir cela. Des idées?

est ici une version plus simple du problème: Pourquoi req.flash ("erreurs", "bonjour \ n adieu") retour

hello goodbye 

au lieu de

hello 
goodbye 

Répondre

0

En fait encore mieux ..

FICHIER EJS:

<div class="container"> 
     <% if(error && error.length > 0) { %> 
     <div class="alert alert-danger"> 
      <% if(error.length === 1) { %> 
       <strong> <%= error %> </strong> 
      <% } else { %> 
       <ul> 
        <% error.forEach(function(err) { %> 
         <li> <strong> <%= err %> </strong></li> 
        <% }) %> 
       </ul> 
      <% } %> 
     </div> 
    <% } 
    if(success && success.length > 0) { %> 
     <div class="alert alert-success"> 
       <strong> <%= success %> </strong> 
     </div> 
    <% } %> 
</div> 

.js FICHIER

var messages = []; 
errors.forEach(function(msgObject) { 
    messages.push(msgObject.message); 
}) 
req.flash("error", messages) 
2

Peu de choses manquantes de votre message original qui pourrait vous aider à résoudre votre propre problème.

  1. Quel langage de modèle utilisez-vous pour afficher les notifications? Est-ce qu'il échappe à la nouvelle ligne?
  2. Devriez-vous utiliser HTML à la place? Donc <br /> au lieu de \n.
  3. Pourquoi ne pas utiliser plusieurs req.flash en séquence pour créer un tableau de notifications?

3: Voir ci-dessous

// Set a flash message by passing the key, followed by the value, to req.flash(). 
req.flash('info', 'Flash is back!') 
req.flash('info', 'Another message!') 

// Get an array of flash messages by passing the key to req.flash() 
res.render('index', { messages: req.flash('info') }); 

Puisque nous avons un array de messages, vous pouvez itérer sur le tableau messages pour leur montrer individuellement:

{% for message in messages %}<li>{{ message }}</li>{% endfor %} 
0

Vous avez raison, je oublié mon fichier ejs, qui répond à ma question.

Je fondamentalement ajouté HTML li au lieu de caractères de nouvelle ligne (pour faire une liste à puces d'erreurs)

errors.forEach(function(msgObject) { 
    console.log(msgObject.message); 
    messages += "<li>" + msgObject.message + "</li>"; 
}) 
if(messages != "") { 
    messages = "<ul>" + messages + "</ul>"; 
} 

alors eu dans mes EJS déposer

<div class="container"> 
    <% if(error && error.length > 0) { %> 
     <div class="alert alert-danger"> 
       <strong> <%- error %> </strong> 
     </div> 
    <% } 
    if(success && success.length > 0) { %> 
     <div class="alert alert-success"> 
       <strong> <%= success %> </strong> 
     </div> 
    <% } %> 
</div> 

J'ai remplacé <% = erreurs%> avec <% - erreurs%>

+0

heureux d'avoir pu aider, accepter ma réponse si vous le sentez incliné, bonne chance dans votre application! :) – Nijikokun