質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

解決済

1回答

1366閲覧

プログラミングRust 2.5 簡単なWebサーバのコードが正しく動作しない

tyu_ru_cpp

総合スコア40

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

0クリップ

投稿2019/04/28 12:17

編集2019/04/28 12:22

前提・実現したいこと

今まで積んでた「プログラミングRust」で学習中です

2.5 簡単なWebサーバのコードをコードを実行してみたのですが、ボタンを押しても動作しません

自分はWeb系の人ではないのでgetとかpostとかもよくわかってなく、どこが間違っているのかわからないので質問しました

該当のソースコード

toml

1[package] 2name = "iron-gcd" 3version = "0.1.0" 4authors = [""] 5 6[dependencies] 7iron = "0.5.1" 8mime = "0.2.3" 9router = "0.5.1" 10urlencoded = "0.5.0"

rust

1extern crate iron; 2#[macro_use] 3extern crate mime; 4extern crate router; 5 6use iron::prelude::*; 7use iron::status; 8use router::Router; 9 10extern crate urlencoded; 11 12use std::str::FromStr; 13use urlencoded::UrlEncodedBody; 14 15fn main() { 16 let mut router = Router::new(); 17 18 router.get("/", get_from, "root"); 19 router.post("/gcd", post_gcd, "gcd"); 20 21 println!("Serving on http://localhost:3000..."); 22 Iron::new(router).http("localhost:3000").unwrap(); 23} 24 25fn get_from(_request: &mut Request) -> IronResult<Response> { 26 let mut response = Response::new(); 27 28 response.set_mut(status::Ok); 29 response.set_mut(mime!(Text/Html; Charset=Utf8)); 30 response.set_mut( 31 r#" 32 <title>GCD Calculator</title> 33 <from action="/gcd" method="post"> 34 <input type="text" name ="n"/> 35 <input type="text" name ="n"/> 36 <button type="submit">Compute GCD</button> 37 </from>"#, 38 ); 39 40 Ok(response) 41} 42 43fn post_gcd(request: &mut Request) -> IronResult<Response> { 44 let mut response = Response::new(); 45 46 let from_data = match request.get_ref::<UrlEncodedBody>() { 47 Err(e) => { 48 response.set_mut(status::BadRequest); 49 response.set_mut(format!("Error parsing from data: {:?}\n", e)); 50 return Ok(response); 51 } 52 Ok(map) => map, 53 }; 54 55 let unparsed_numbers = match from_data.get("n") { 56 None => { 57 response.set_mut(status::BadRequest); 58 response.set_mut(format!("from data has no 'n' parameter")); 59 return Ok(response); 60 } 61 Some(nums) => nums, 62 }; 63 64 let mut numbers = Vec::new(); 65 for unparsed in unparsed_numbers { 66 match u64::from_str(&unparsed) { 67 Err(_) => { 68 response.set_mut(status::BadRequest); 69 response.set_mut(format!( 70 "Value for 'n' parameternot a number: {:?}\n", 71 unparsed 72 )); 73 return Ok(response); 74 } 75 Ok(n) => { 76 numbers.push(n); 77 } 78 } 79 } 80 let mut d = numbers[0]; 81 for m in &numbers[1..] { 82 d = gcd(d, *m); 83 } 84 85 response.set_mut(status::Ok); 86 response.set_mut(mime!(Text/Html; Charset=Utf8)); 87 response.set_mut(format!( 88 "The gratest common divisor of the numbers {:?} is <b>{}</b>\n", 89 numbers, 90 d 91 )); 92 Ok(response) 93} 94 95fn gcd(mut n: u64, mut m: u64) -> u64 { 96 assert!(n != 0 && m != 0); 97 while m != 0 { 98 if m < n { 99 let t = m; 100 m = n; 101 n = t; 102 } 103 m = m % n; 104 } 105 n 106} 107 108#[test] 109fn test_gcd() { 110 assert_eq!(gcd(14, 15), 1); 111 assert_eq!(gcd(2 * 3 * 5 * 11 * 17, 3 * 7 * 11 * 13 * 19), 3 * 11); 112 113}

試したこと

localhost:3000/gcdにはアクセスできませんでした。

補足情報(FW/ツールのバージョンなど)

cargo 0.23.0 (61fa02415 2017-11-22)
rustc 1.22.1 (05e2e1c41 2017-11-22)
rustdoc 1.22.1 (05e2e1c41 2017-11-22)

よろしくおねがいします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

htmlのタグにタイポが。from -> form

diff

1- <from action="/gcd" method="post"> 2+ <form action="/gcd" method="post"> 3 4- </from>"#, 5+ </form>"#,

投稿2019/04/28 12:49

tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyu_ru_cpp

2019/04/28 12:58 編集

全然気づきませんでした htmlってタグ間違えててもそれっぽく表示されるんですね... ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問