rust - How to insert data submitted from an HTML form into a Redis database? -


i trying save user-submitted http data redis. code using nickel:

#[macro_use] extern crate nickel; extern crate redis; extern crate hyper;  use redis::{client,parser, commands, connection, redisresult}; use nickel::{nickel, request, response, httprouter, middlewareresult,middleware, mediatype,jsonbody}; use std::collections::hashmap; use nickel::status::statuscode; use nickel_redis::{redismiddleware, redisrequestextensions}; use hyper::url; use url::form_urlencoded; use std::sync::{arc, mutex}; use std::io; use std::io::prelude::*; use std::fs::file;  fn save_db<'a>(req: &mut request, res: response<'a>) -> middlewareresult<'a> {     let mut server = nickel::new();     /* fixme: connect redis*/      let client = client::open("redis://127.0.0.1/").unwrap();     let conn = client.get_connection().unwrap();      server.post("/confirmation", middleware!{|req, res|         let mut form_data = string::new();         req.origin.read_to_string(&mut form_data).unwrap();         let _: () = conn.set("contents", form_data).unwrap();         println!("{}", form_data);          let mut data = hashmap::<&str, string>::new();         data.insert("content", form_data);         data.insert("page_title", "save blog data".to_string());         return res.render("app/views/blog/save.tpl", &data);     }); }  fn main() {     let mut server = nickel::new();      // start using router     let mut router = nickel::router();     let client = client::open("redis://127.0.0.1/").unwrap();     let conn = client.get_connection().unwrap();      router.get("/test-save-db", save_db);      server.utilize(router);     server.listen("127.0.0.12:8080"); } 

save.tpl

  <!doctype html>     <html>     <head lang="en">         <meta charset="utf-8">         <title>{{ page_title }}</title>     </head>     <body>     <h1>saved new blog.</h1>     <h2>author {{form_data}}</h2>     <h2>content {{content}}</h2>     <form>     first name:<br>     <input type="text" name="firstname" >     <br>     <button type="submit" formenctype="application/x-www-form-urlencoded" formaction="/test-save-db" formmethod="post">send</button>     </form>  </body> </html> 

but error

error: cannot infer appropriate lifetime lifetime parameter 'b due conflicting requirements [e0495](req.origin.read_to_string(&mut form_data).unwrap();)

the problem see in code you're trying register handler route (post /confirmation) inside handler gets called when /test-save-db route matched. doesn't seem correct.

to make code , intent clearer, suggest use middleware! macro, find simplest way describe routes in nickel. @ least has been experience since starting use framework yesterday :-)

so example might rewritten follows:

fn main() {     let client = client::open("redis://127.0.0.1/").unwrap();     let mut server = nickel::new();      server.get("/test-save-db", middleware! { |req, res|         // request , send response     });      server.listen("127.0.0.12:8080"); } 

if need multiple handlers sharing same client, need use std::sync::arc have thread safe shared state, , clone each handler (it clone arc, not client).


Comments

Popular posts from this blog

sql - VB.NET Operand type clash: date is incompatible with int error -

SVG stroke-linecap doesn't work for circles in Firefox? -

python - TypeError: Scalar value for argument 'color' is not numeric in openCV -