静的ファイルはstaticに置くルールとする
if path.starts_with("/static/") {
let file_path = format!(".{}", path);
match fs::read(&file_path) {
Ok(contents) => {
let content_type = get_content_type(path);
let response = format!(
"HTTP/1.1 200 OK\r\nContent-Type: {}\r\nContent-Length: {}\r\n\r\n",
content_type,
contents.len()
);
let _ = stream.write_all(response.as_bytes());
let _ = stream.write_all(&contents);
}
Err(_) => {
let response = http_response(404, "text/plain", "Static file not found");
let _ = stream.write_all(response.as_bytes());
}
}
stream.flush().unwrap();
return;
}
//
fn get_content_type(path: &str) -> &'static str {
if path.ends_with(".css") {
"text/css"
} else if path.ends_with(".js") {
"application/javascript"
} else if path.ends_with(".png") {
"image/png"
} else if path.ends_with(".jpg") || path.ends_with(".jpeg") {
"image/jpeg"
} else if path.ends_with(".svg") {
"image/svg+xml"
} else if path.ends_with(".woff2") {
"font/woff2"
} else {
"application/octet-stream"
}
}
templatesフォルダのファイルが、以下対応できるようになります。
<link rel="stylesheet" href="/static/styles.css">
<script src="/static/app.js"></script>
<h1>Welcome to the Rust server!</h1>
<p>hello, {{ name }}</p>