-
Rust: Javascript POST json 데이터 consume컴퓨터/Rust 2021. 7. 25. 22:01728x90반응형
할것
Rust Rocket 웹 프레임워크로 서버를 만들고 (backend)
홈페이지에서 (frontend) 아래에서 메시지를 입력하면 만들어둔 Rust 서버로 데이터를 보낼 것이다.
여기서 메시지는 json string을 보내고 이 데이터를 javascript로 POST 한다.
Rust
카카오 챗봇은 여러가지 메시지를 한번에 담아서 보낼 수 있는데 (template.outputs)
각 type을 체크해서 vector에 string으로 담아 rust로 { "type": "carousel", "json": data } JSON 형식으로 반환할 것이다.
#[post("/json", format = "json", data = "<kakao>")] pub fn json_test(kakao: String) -> Result<Json<Value>, Status> { // println!("what is {:#?}", kakao); let mut vec = vec![]; let json: Template = serde_json::from_str(&kakao).unwrap(); for output in &json.template.outputs { // println!("{:#?}", output); // println!("Key: {}", check_type(output).unwrap()); match check_type(output) { Some(t) => vec.push(t), _ => return Ok(Json(json!({"dd": "Dd"}))), } } let context = json!({ "type": vec, "json": json, }); Ok(Json(context)) }
Javascript
POST 함수다. 원하는 text를 보내면 JSON 형식으로 바꿔서 보낸다.
input에서 text를 바로 읽어오니 이상하게 되어서 parse를 한 후 stringify해서 String 형식으로 보내니
Rust에서 사용할 수 있었다.
function post(text) { var xhr = new XMLHttpRequest(); var url = "http://localhost:8000/v1/json"; xhr.open("POST", url, true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { var json = JSON.parse(xhr.responseText); console.log("data got!: " + json.type); // rust 서버에서 받은 json } }; var data = JSON.parse(text); xhr.send(JSON.stringify(data)); }
결과
/v1/json에 HTML input에서 메시지 작성 후 보내면 Javascript로 POST 데이터를 Rust 서버로 보낸다.
Rust 엔드포인트 함수에서 json을 처리하고 outputs에 무슨 타입이 있는지 확인해서 출력했다.
728x90'컴퓨터 > Rust' 카테고리의 다른 글
Rust: serde json Enum 공부 (0) 2021.07.28 Rust: String 한글 len() (UTF-8) (0) 2021.07.20 Rust: serde De/Serialize traits into JSON (0) 2021.07.19