【问题标题】:Wasm-rust and postgresWasm-rust 和 postgres
【发布时间】:2022-01-25 20:09:00
【问题描述】:

有没有办法使用 wasm 从 postgres 的数据库中获取数据?我曾尝试使用 rust 中的库来获取它,但是当我使用“wasm-pack building--target web”构建包时遇到了一些错误。这个想法是在 lib.rs 文件中构建一个从数据库返回数据的函数。我在 lib.rs 中有以下代码:

use postgres::{Client, Error, NoTls};
use wasm_bindgen::prelude::*;
...

struct Author {
    _id: i32,
    name: String,
}

#[wasm_bindgen]
pub fn select_name(name: &String) -> Result<(), Error> {
    let mut client = Client::connect("postgresql://user:1234@localhost:5432/db", NoTls)?;    
    for row in client.query(
        "SELECT id, name FROM author WHERE name = $1",
        &[&name],
    )? {
        let author = Author {
            _id: row.get(0),
            name: row.get(1),
        };
        println!(
            "Select_Name => Author {} :",
            author.name
        );
    }
    Ok(())
}

但我得到了一些错误:

error[E0432]: unresolved import `crate::sys::IoSourceState`
error[E0432]: unresolved import `crate::sys`
...

【问题讨论】:

  • 你知道 Postgres 在服务器端运行而 wasm 在浏览器上运行吗?这将在哪里运行?
  • 我知道,这就是我问的原因,Wasm 将 rust 函数转换为在浏览器上运行
  • 那是不可能的。您需要分离逻辑并使用http 例如在github.com/chidea/actix-yew-live-tmpl

标签: postgresql rust webassembly wasm-bindgen


【解决方案1】:

这是不可能的(正如 Njuguna Mureithi 正确地写的那样),但它可以被规避。

我们可以使用该项目:https://github.com/PostgREST/postgrest 并将 API 暴露给我们的 sql server。

我们下载最新版本的 postgrest https://github.com/PostgREST/postgrest/releases/tag/v9.0.0 如果是 Linux,我们解包

tar -xf postgrest-v9.0.0-linux-static-x64.tar.xz

然后运行帮助

./postgrest -h

为 ./postgrest 创建一个配置文件

postgrest -e &gt; cfg.psqlrest

在配置文件中更改数据库的用户名和密码。 例如与

db-uri = "postgres://user:pasword@localhost:5432/dbname"

到您的 dbname 数据库访问用户:密码配置

db-uri = "postgres://postgres:zaqwsxc@localhost:5432/dbname"

并运行将向我们的 postgres 发布 api 的服务器

./postgrest cfg.psqlrest

地址http://localhost:3000将开始访问数据库dbname,必须事先在数据库服务器中创建。

这里是使用 API 调用查询所需的库的描述。

https://rustwasm.github.io/wasm-bindgen/examples/fetch.html

API 示例 https://postgrest.org/en/stable/api.html

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 2021-08-28
    • 2021-09-15
    • 2021-09-15
    • 2020-07-10
    • 2020-08-21
    • 2020-02-29
    • 2023-01-07
    相关资源
    最近更新 更多