获取以下错误:
error[E0308]: mismatched types
--> src/u/r/api/products/articles.rs:17:69
|
17 | let query = web::block(move || articles::table.load::<Articles>(&*connection).unwrap()).await;
| ---------------- ^^^^^^^^^^^^ types differ in mutability
| |
| arguments to this function are incorrect
|
= note: expected mutable reference `&mut _`
found reference `&PgConnection`
note: associated function defined here
--> /Users/b/.cargo/registry/src/github.com/diesel-2.0.2/src/query_dsl/mod.rs:1497:8
|
1497 | fn load<'query, U>(self, conn: &mut Conn) -> QueryResult<Vec<U>>
| ^^^^
我使用的是柴油v2,它的工作之前,我升级到最新版本。
我哪里做错了?
use crate::u::db::connection::DbPool;
use actix_web::{get, web, HttpResponse, Responder};
#[get("/product/articles")]
pub async fn list(db_pool: web::Data<DbPool>) -> impl Responder {
use crate::u::db::models::products::Articles;
use crate::u::db::schemas::products::articles;
let connection = db_pool.get();
if let Err(e) = connection {
return HttpResponse::InternalServerError().body(format!("E1-{:?}", e));
}
let connection = connection.unwrap();
let query = web::block(move || articles::table.load::<Articles>(&*connection).unwrap()).await;
if let Err(e) = query {
return HttpResponse::InternalServerError().body(format!("E2-{:?}", e));
}
let q = query.expect("oops not Ok");
HttpResponse::Ok().json(q)
}
models/products.rs
use chrono::{DateTime, Utc};
use uuid::Uuid;
use crate::u::db::schemas::products::*;
#[derive(Queryable, Debug, Identifiable, serde::Serialize, serde::Deserialize)]
#[table_name = "articles"]
#[primary_key(prod_art_pvt_uuid)]
pub struct Articles {
pub prod_art_pvt_uuid: Uuid,
pub prod_art_pub_uuid: Uuid,
pub prod_article_pub_id: i32,
pub t: DateTime<Utc>,
}
db/connection.rs
use crate::u::config;
use diesel::pg::PgConnection;
use diesel::r2d2::ConnectionManager;
use r2d2::Pool;
pub type DbPool = r2d2::Pool<ConnectionManager<PgConnection>>;
pub fn get_pool() -> DbPool {
let url: String = config::get("database_url");
println!("Connecting to database...");
let manager = ConnectionManager::<PgConnection>::new(url);
Pool::builder()
.build(manager)
.expect("Failed to create database connection pool.")
}
1条答案
按热度按时间qoefvg9y1#
错误消息已经指出了需要更改的内容。重要的是:
正如你所看到的,你需要把
load
函数的参数改成一个可变的引用,你试图传递一个不可变的引用,这是底层函数所不能接受的。我建议查看Diesel Migration guide,它包含了2.0版本中大多数面向用户的突破性更改的概述。