如何使用Nickel框架呈现网页?

时间:2017-06-26 18:34:09

标签: rust nickel

我尝试创建一个与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");
}

的index.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文件。

1 个答案:

答案 0 :(得分:0)

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

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

正在工作......即使它看起来并不是很好。