2016-04-27 44 views
0

我使用nickel.rs写在鲁斯特的端点:不能借用`* request`为可变,因为它是还借为不可改变

{ 
    let client = client.clone(); 
    let mongodb = MongoRepository::new(client,"rust-users".into()); 
    router.put("https://stackoverflow.com/users/:id",middleware!( |request ,mut response |{ 

     let id = try_with!(response,{request.param("id").ok_or((StatusCode::BadRequest, "Id parameter required")) }); 
     let user = try_with!(response,{request.json_as::<User>() 
        .map_err(|e| (StatusCode::BadRequest, format!("{}",e)))}); 
     let update_id = try_with!(response,{mongodb.update_by_id("users",id,user) 
        .map_err(|e| (StatusCode::InternalServerError, e))}); 
     ApiResult::Ok(StatusCode::Ok,update_id.to_json()) 

    })); 
} 

在这一行:

let id = try_with!(response,{request.param("id").ok_or((StatusCode::BadRequest, "Id parameter required")) }); 

request是以不可变的状态借来的,但在这一行中:

let user = try_with!(response,{request.json_as::<User>() 
        .map_err(|e| (StatusCode::BadRequest, format!("{}",e)))}); 

请求是在一个可变的sta TE。这会导致以下错误:

error: cannot borrow *request as mutable because it is also borrowed as immutable

我试图通过包装在一个单独的范围id线来解决这个错误,但问题依然存在。

我不知道如何解决这个问题。代码中有其他问题吗?

回答

3

id的类型为&str。这是一个指向变量request的指针。调用json_as将参数作为变量request的可变引用。这导致错误“不能借用*request作为可变因为它也被借用为不可变的”。

有几种方法可以解决这个问题;可能最直接的方法是使用to_owned()&str转换为String

+0

通过试验和错误我终于弄清楚了我的错误。感谢您的支持:) – menawi

相关问题