首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rust中的wasm_bindgen函数中发出HTTP请求?

如何在Rust中的wasm_bindgen函数中发出HTTP请求?
EN

Stack Overflow用户
提问于 2021-02-27 10:24:57
回答 1查看 2.3K关注 0票数 4

我正在开发一个使用Rust和wasm-pack编译的节点JS包,我需要在代码中发出HTTP请求。我尝试使用reqwest库,所以在测试中一切都很好,但是我在打包时出错了。

代码语言:javascript
复制
#![allow(non_snake_case)]

use reqwest;
use wasm_bindgen::prelude::*;

// function
#[wasm_bindgen]
pub fn makeGetRequest(url: &str) -> String {
    let mut resp = reqwest::get(url).unwrap();
    resp.text().unwrap()
}

// test
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_makeGetRequest() {
        let url = "https://stackoverflow.com/";
        let body = makeGetRequest(url);
        assert!(body.len() > 0);
    }
}

配置Cargo.toml

代码语言:javascript
复制
...

[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"
reqwest = "0.9"

我用命令打包该项目:

代码语言:javascript
复制
wasm-pack build --release --target nodejs

我得到了一个错误:

代码语言:javascript
复制
...
error: could not compile `net2`

我发现net2wasm-pack中看起来不受支持,所以我可能不能在我的例子中使用reqwestnet2

是否有一种方法可以成功地使用wasm-pack进行同步HTTP请求打包?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-27 19:37:28

它不会像您预期的那样容易工作: Wasm字节码是在受保护的环境中执行的,没有对操作系统特性(如磁盘、网络、常规随机生成器和任何其他类型的I/O )的访问,因此,当您使用这些特性编译任何使用这些特性的Rust代码时,它就无法工作。

不幸的是,您的代码(例如文件访问)通常甚至在运行时默默地编译,然后以神秘的方式失败。这并不是你习惯使用锈菌的习惯,也是当前魔咒锈栈的一个主要缺点。

要访问OS功能,您需要WASI (Wasm系统接口)作为扩展。要在NodeJs中启用Wasi,可以使用类似于WasmerJs的内容,例如这篇文章提供了一个简短的摘要。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66397775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档