如何让 connect-flash 连接到 return 多条消息,或一条带有换行符的消息?

How do I get connect-flash to return multiple messages, or a single message with newline characters?

我正在使用 nodejs 构建一个应用程序。

我创建了一个表单,我正在处理用户输入的后端验证。基本上,我有一个 var,"messages",每次遇到输入错误时,我都会将错误附加到消息中。

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

(我也使用指示性 -- http://indicative.adonisjs.com/ -- 进行错误验证。它 return 是一个数组错误)

我return使用 connect-flash 向用户发送错误

req.flash("error", messages);

我正在使用连接闪存 https://www.npmjs.com/package/connect-flash

我的问题是 connect-flash 会忽略换行符。即,我得到类似的东西:

我希望每条错误消息都在单独的一行中。我似乎无法找到一种方法来实现这一点。有什么想法吗?

这是问题的一个更简单的版本:为什么 req.flash("errors", "hello \n goodbye") return

hello goodbye

而不是

hello
goodbye

您的原始 post 遗漏了一些可能会帮助您解决自己的问题的内容。

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

你说得对,我忘记了我的 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>

我将 <%= errors %> 替换为 <%- errors %>

实际上更好..

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

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

它将像这样工作:

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