2

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

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

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

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

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

在此处输入图像描述

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

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

hello goodbye

代替

hello
goodbye
4

4 回答 4

4

原始帖子中缺少的一些内容可能会帮助您解决自己的问题。

  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 %}
于 2017-02-14T18:47:43.637 回答
1

其实更好..

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)
于 2017-02-14T20:00:23.710 回答
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>

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

于 2017-02-14T19:44:57.407 回答
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>
    <% } %>
于 2019-05-17T09:01:46.253 回答