如何让connect-flash返回多条消息,或者使用换行符返回单条消息?

时间:2017-02-14 18:40:28

标签: javascript node.js newline flash-message connect-flash

我正在使用nodejs构建应用。

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

using namespace std;

int main()
{
   cout << "Hello world!\n";
}

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

我正在使用connect-flash

将错误返回给用户
var messages ="";
errors.forEach(function(msgObject) {
    console.log(msgObject.message);
    messages += msgObject.message + "\r\n";
})

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

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

enter image description here

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

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

req.flash("error", messages);

而不是

hello goodbye

4 个答案:

答案 0 :(得分:4)

原帖中缺少一些可能有助于您解决问题的内容。

  1. 您使用哪种模板语言来显示通知?它是否逃脱了新线?
  2. 您应该使用HTML吗?所以<br />代替\n
  3. 为什么不按顺序使用多个req.flash来创建通知数组?
  4. 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 %}
    

答案 1 :(得分:0)

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

我替换了&lt;%= errors%&gt;与&lt;% - errors%&gt;

答案 2 :(得分:0)

其实更好..

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 FILE

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

答案 3 :(得分:0)

它将像这样工作:

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