Как визуализировать веб-страницу, используя никелевый фреймворк?

Я пытаюсь создать веб-страницу, которая взаимодействует с 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 ответ

Вы должны повторно использовать каталог www после запроса GET:

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

работает... даже если это не кажется действительно хорошим.

Другие вопросы по тегам