Jade/Mongo 输出中的换行符

Pau*_*der 3 javascript mongodb node.js pug

我已经阅读了有关此问题的 stackoverflow 上的所有问题,但没有一个能满足我的需求。

我有一个简单的留言板,用户可以在其中通过 textarea 发表评论。这些存储在 Mongo 中并通过 jade 显示

但是所有的换行符都丢失了。

它们存储\r\n在数据库中,但在呈现时不显示。

<br />s替换它们也无济于事,因为它们只是呈现为字符串。

用 包裹评论<pre>确实有帮助...但它会阻止文本在嵌入的图片周围浮动。

用 pre 换行

有没有简单的方法可以只在存储时输出文本?

这是用<span><div>不是<pre>:这是我希望它浮动的方式,但不呈现换行符

span/div 没有换行符

玉模板:

  if (user)
    p You are logged in as #{user.username} &nbsp;
      a(href='/logout') [Log Out]
  else
    a(href='/login') Log In

 .threadWrapper
   each post, i in posts
    .thread.col-md-12
      a(href="/thread/#{post._id}")
        span#postTitle #{post.postTitle}
      | &nbsp;
      span#commentCount (#{post.comments.length})
      | &nbsp;created at&nbsp;
      span#createdAt #{post.createdAt}
      | &nbsp;by&nbsp;
      span#op #{post.op}
      if (user)
        button.close.deleteThreadButton(type='submit', aria-label='Close')
          span(aria-hidden='true') ×
      //button.deleteThreadButton(type="submit") X
      .ThreadContent
        if post.postFileLink
          case post.postFileType
            when "image/png"
            when "image/gif"
            when "image/jpeg"
              img(src="/files/#{post.postFileLink}")
            when "video/mp4"
            when "video/webm"
              video(width="200", height="150", controls)
                source(src="/files/#{post.postFileLink}", type="#{post.postFileType}")
                | Sorry, your browser does not support the video tag. No Videos for you!
      span#threadContent #{post.postContent}
      .clearfix
Run Code Online (Sandbox Code Playgroud)

rob*_*lep 7

你的数据库包含文本,因为它是存储,但不同于“普通” HTML元素(如文本区域的手柄换行符<div><p>等等),这里的空白的连续序列被合并为一个空格。

您可能可以使用CSS解决它。

例如:

- var text = 'foo\r\nbar\r\nxxx';

p(style = 'white-space: pre-wrap')= text
Run Code Online (Sandbox Code Playgroud)

或者,您可以将换行符替换为<br>并让 Jade 不转义输出:

- var text = 'foo\r\nbar\r\nxxx'.replace(/\r\n/g, '<br>');

p !{text}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的用户<script>在评论中输入恶意块(这最终会在您的页面上未转义,除非您以某种方式将它们过滤掉),这可能会给您带来潜在的安全问题。