1

我正在尝试制作一个与 JavaScript 交互并将 JSON 数据发送到 Rust 函数的网页,然后呈现www文件。我的项目结构是:

/..
   /src
   /www
     |___index.html
     |___/css
     |      |__style.css
     |
     |___/javascript
     |             |__javascript-supp.js
     |___/images
               |__myImg.png

main.rs

use nickel::{Nickel, HttpRouter, StaticFilesHandler, NickelError, Request, Response,
             MiddlewareResult};
use std::collections::HashMap;

fn tmpl_handler<'a>(_: &mut Request, res: Response<'a>) -> MiddlewareResult<'a> {
    let mut data = HashMap::<&str, &str>::new();

    // add data for render
    // name = {{ name }} in template
    data.insert("name", "Nickel");

    res.render("www/", &data)
}

fn main() {
    let mut server = Nickel::new();

    server.utilize(StaticFilesHandler::new("www/"));
    server.get("/login/*", tmpl_handler);

    server.listen("127.0.0.1:6767");
}

索引.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src=javascript/javascript.js></script>
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <title>Encryptor Test</title>
  </head>

  <body>
<div class=header>
  <h1>
        Hello {{ name }}!
  </h1>
</div>
    <div class=main-row>

        <div class="col-3 menu">
          <ul>
            <li>Login</li>
            <li>Download File</li>
            <li>Upload File</li>
            <li>Exit</li>
          </ul>
        </div>

        <div class="col-9 context-area">
        </div>
    </div>
    <div class=footer></div>
  </body>
</html>

此代码一直有效,直到:

server.utilize(StaticFilesHandler::new("www/"));

我想发送数据$name = "Nickel"并渲染 index.html。

如何渲染整个www/目录,以便在访问127.0.0.1:6767/login后整个页面都在那里(JS、CSS 和图像)而不仅仅是纯文本?

我可以根据要求提供 CSS 文件。

4

1 回答 1

0

您必须在 GET 请求后重新使用www目录:

server.get("/login", tmpl_handler);
server.utilize(StaticFilesHandler::new("www/"));

正在工作......即使它看起来不太好。

于 2017-06-26T22:10:07.400 回答