swift - Leaf & Vapor 3 - 无法在 View 中加载 css 和图像

标签 swift vapor leaf

总的来说,我对 Vapor 和后端逻辑很陌生。
我正在使用 Leaf 构建一个简单的 Web 应用程序,我正在尝试从 psql 数据库读取数据并将它们显示在 html/css(leaf)页面中。
问题是当我将参数传递给页面时,它不会加载 css 和图像。

这是我的 Controller 中的功能

my project configuration:

App
├── Package.swift
├── Resources
│   ├── Views
│   │   └── index.leaf
├── Public
│   ├── images (images resources)
│   ├── styles (css resources)
└── Sources
    ├── App
         ├── Controllers
         │        └── PoesiaController.swift
         ├── Models
               └── Poesia.swift

final class PoesiaController {

func createView(_ req: Request) throws -> Future<View> {
        let id: Int = try req.parameters.next(Int.self)
        return Poesia.find(id, on: req).unwrap(or: NSError(domain: "errore", code: 1, userInfo: nil)).flatMap(to: View.self) { p in
            return try req.view().render("index", ["title": p.title, "content":p.content])
        }
    }

}

我创建了一条路线
let poesieController = PoesiaController()
router.get("poesia", Int.parameter, use: poesieController.createView)

当我运行页面时,页面有正确的数据,但没有加载 css 或图像。

我的 index.leaf 文件

<!DOCTYPE html>
<html>

<head>
    <link href="https://fonts.googleapis.com/css?family=Long+Cang&display=swap" rel="stylesheet">
    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
    <link rel="stylesheet" href="styles/poesie.css">
</head>

<body>
    <!--Frontpage image with overlay-->
    <div class="container">
          <img class="frontpage" id= 'frontpage' src="images/alle-scoperte.jpg"/>
          <div class="overlay"></div>
    </div>

    <!--Sticky Title with overlay-->
    <div class="title">
          <div class="sticky" style="background-image: url('images/alle-scoperte.jpg'); background-position: center bottom; background-size: cover;">
              <span id="titleText">#(title)</span>
              <img class="nav" src="images/icons/menu.png" onclick="openMenu()" />
              <div class="menu">
                  <img src="images/icons/home.png">
                  <img src="images/icons/poesie.png">
                  <img src="images/icons/lib.png">
                  <img src="images/icons/collab.png">
                  <img src="images/icons/book.png">
                  <img src="images/icons/chem.png">
              </div>
          </div>
    </div>
    <!--Three Columns, left and right for author notes and center for text-->
    <div class="row">
      <div id="column_left" class="column">
          <div id="note1" class="note">
              <span class="left">Conoscere una persona significa aprirsi ad un mondo.</span>
          </div>
          <div id="note2" class="note">
              <span class="left">Tutto racchiuso nell'unicit&agrave; dei primi incontri.</span>
          </div>
      </div>

      <div id="column_center" class="column">
        <div class= "content">
            <div class="sheet">
               #(content)
            </div>
            <div class='hint'>
                <div id = "rotate">
                    <img src="images/icons/rotate.png">
                </div>
                Ruota il dispositivo per vedere il commento.
            </div>
        </div>
      </div>

      <div id="column_right" class="column">
          <div id="note3" class="note">
            <span class="right">Una terra nuova da scoprire attraverso la curiosit&agrave; ed il piacere.</span>
          </div>
          <div id="note4" class="note">
              <span class="right">Commento</span>
          </div>
      </div>
    </div>

    <div class="footer">
        &copy;Luis Claudio Pantaleone | Designed and Developed by Simone Deriu | Credits
    </div>
</body>
<script src="js/jquery-3.4.1.min.js"></script>
<script src="js/main.js"></script>

</html>

奇怪的是,如果我创建一个路由来显示没有变量的页面,或者在对象映射之外,它会正常显示。
 router.get("index") {req -> Future<View> in
        return try req.view().render("index")
    }

更新:我发现问题是在带参数的调用中呈现叶页。如果我尝试使用没有参数的路由呈现页面,它会起作用,但是如果我在带有参数的路由中执行相同的操作,它不会加载 css 和图像。

最佳答案

您的问题是由于您错过了 /开头的href<link>标签。它应该是:

<link rel="stylesheet" href="/styles/poesie.css">

省略“/”意味着路径是相对于 URL 的。这就是为什么它适用于您的索引页面而不是其他页面。将其放入可确保将其视为绝对路径。

关于swift - Leaf & Vapor 3 - 无法在 View 中加载 css 和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60340296/

相关文章:

与 Objective C 相比,Swift SHA256 加密返回不同的加密字符串

swift - 尝试创建拖放到 TableView 。 swift

vapor - 了解如何初始化 Vapor 4 存储库

javascript - ParseError.tagTemplateNotFound ("short\").val")

swift - 终端 Vapor 更新正在使用不再支持的Swift工具版本3.1.0;使用4.0.0或更高版本\n“,输出:

ios - RLMObjects 在 Realm Cocoa 中未被识别为相同的对象

Swift - 裁剪允许编辑*外部*的图像

swift - 如何重定向所有 404 错误

swift - 使用 vapor 3 在同一条路线上处理不同种类的 json

swift - 叶模板未呈现 vapor 3.0