Как заставить connect-flash возвращать несколько сообщений или одно сообщение с символами новой строки?

Я создаю приложение, используя nodejs.

Я создал форму, и я работаю над внутренней проверкой пользовательского ввода. По сути, у меня есть var, "messages", и каждый раз, когда я сталкиваюсь с ошибкой ввода, я добавляю ошибку к сообщениям.

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

(Я также использую ориентировочный - http://indicative.adonisjs.com/ - для проверки ошибок. Возвращает ошибки массива)

Я возвращаю ошибки пользователю, используя connect-flash

req.flash("error", messages);

Я использую Connect-Flash https://www.npmjs.com/package/connect-flash

Моя проблема в том, что connect-flash игнорирует символы новой строки. Т.е. я получаю что-то вроде:

Я хотел бы, чтобы каждое сообщение об ошибке было в отдельной строке. Кажется, я не могу найти способ сделать это. Есть идеи?

Вот более простая версия проблемы: почему req.flash("errors", "Hello \n Goodbye") возвращает

hello goodbye

вместо

hello
goodbye

3 ответа

Решение

На самом деле даже лучше..

EJS FILE:

    <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

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

В оригинальном сообщении отсутствуют некоторые вещи, которые могут помочь вам решить вашу собственную проблему.

  1. Какой язык шаблонов вы используете для отображения уведомлений? Это ускользает от новой строки?
  2. Вы должны использовать вместо этого HTML? Так <br /> вместо \n,
  3. Почему бы не использовать несколько req.flash по порядку создать массив уведомлений?

3: смотри ниже

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

Так как у нас есть array сообщений, вы можете перебирать messages массив, чтобы показать их индивидуально:

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

Это будет работать так:

<% if (hasMessages()) { %><% messages().forEach(function(msg){ %>
<% if(msg.message.length > 1) { %>
    <div class="alert fade in alert-<%- msg.type %>" data-alert="alert">
        <a class="close" data-dismiss="alert">&times;</a>            
        <% msg.message.forEach(function(innerMsg){ %>
            <%- innerMsg %> <br>
        <% }) %>    
    </div>
<% } else { %>    
    <div class="alert fade in alert-<%- msg.type %>" data-alert="alert">
        <a class="close" data-dismiss="alert">&times;</a>
        <%- msg.message %>             
    </div>
    <% } %>

Вы правы, я забыл о моем файле ejs, который отвечает на мой вопрос.

Я в основном добавил HTML li вместо символов новой строки (чтобы сделать маркированный список ошибок)

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

тогда было это в моем файле 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>

Я заменил <% = ошибки%> на <% - ошибки%>

Другие вопросы по тегам