-2
我试图将用户提交的HTTP数据保存到Redis中。这是我的代码中使用镍:如何将从HTML表单提交的数据插入到Redis数据库中?
#[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>
但我得到这个错误
error: cannot infer an appropriate lifetime for lifetime parameter
'b
due to conflicting requirements [E0495](req.origin.read_to_string(&mut form_data).unwrap();)
为什么要在看起来像镍请求处理程序的内部创建一个新的镍服务器?我只希望一次只能有一台服务器。 – Shepmaster
如果我不创建一个新的镍服务器,我不会调用函数server.post()。你如何解决问题? – kenzi
您还没有提供[MCVE](/ help/mcve)(首先强调** C **,然后是** M **),所以我无法编译您的代码以提供任何有用的反馈。我很确定这段代码没有正确使用Nick,但我无法猜测为什么你已经突出显示的行('req.origin.read_to_string(&mut form_data).unwrap()')会导致你所说的错误。 – Shepmaster