Как визуализировать веб-страницу, используя никелевый фреймворк?
Я пытаюсь создать веб-страницу, которая взаимодействует с 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/"));
работает... даже если это не кажется действительно хорошим.