2017-02-14 3 views
1

Ich baue eine App mit nodejs.Wie erhalte ich connect-flash, um mehrere Nachrichten zurückzugeben, oder eine einzelne Nachricht mit Zeilenumbruchzeichen?

Ich habe ein Formular erstellt, und ich arbeite an Back-End-Validierung von Benutzereingaben. Grundsätzlich habe ich eine Var, "Nachrichten", und jedes Mal, wenn ich einen Eingabefehler erhalte, füge ich den Fehler an Nachrichten an.

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

(Ich verwende auch ein Hinweis - http://indicative.adonisjs.com/ -. Für Fehler Validierung Es gibt ein Array Fehler) unter Verwendung von connect-Flash-

ich die Fehler an den Benutzer zurückkehr

req.flash("error", messages); 

ich connect-Flash https://www.npmjs.com/package/connect-flash

Mein Problem ist, dass connect-Flash-Zeichen newline ignoriert. Das heißt, ich bekomme so etwas wie:

enter image description here

ich jede Fehlermeldung in einer separaten Zeile sein möchte. Ich kann keinen Weg finden, das zu erreichen. Irgendwelche Ideen?

Hier ist eine einfachere Version des Problems: Warum req.flash ("Fehler", "hallo \ n goodbye") return

hello goodbye 

statt

hello 
goodbye 

Antwort

0

Eigentlich noch besser ..

EJS DATEI:

<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-Datei

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

Nur wenige Dinge fehlt Ihr ursprünglicher Beitrag, der Ihnen helfen könnte, Ihr eigenes Problem zu lösen.

  1. Welche Vorlagensprache verwenden Sie, um die Benachrichtigungen anzuzeigen? Entkommt es der Newline?
  2. Sollten Sie stattdessen HTML verwenden? Also <br /> statt \n.
  3. Warum nicht mehrere req.flash nacheinander verwenden, um ein Array von Benachrichtigungen zu erstellen?

3: Siehe unten

// 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') }); 

Da wir eine array von Nachrichten haben, können Sie die messages Array iterieren sie individuell zeigen:

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

Du hast Recht, ich habe meine ejs-datei vergessen, die meine frage beantwortet.

Ich habe im Grunde HTML li statt Zeilenumbrüche (Aufzählungen von Fehlern zu machen)

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

dann dies hatte in meinem ejs

<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> 

I <% ersetzt file = Fehler%> mit <% - Fehler%>

+0

Froh, dass ich helfen konnte, meine Antwort zu akzeptieren, wenn Sie so geneigt fühlen, viel Glück bei Ihrer Bewerbung! :) – Nijikokun

Verwandte Themen