Как заставить 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)
В оригинальном сообщении отсутствуют некоторые вещи, которые могут помочь вам решить вашу собственную проблему.
- Какой язык шаблонов вы используете для отображения уведомлений? Это ускользает от новой строки?
- Вы должны использовать вместо этого HTML? Так
<br />
вместо\n
, - Почему бы не использовать несколько
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">×</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">×</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>
Я заменил <% = ошибки%> на <% - ошибки%>