wasm不可以做http请求?

我用go写了一个wasm,里面就是写了一个http 请求,居然不可以。

package main

import (
    "fmt"
    "io"
    "net/http"

    "syscall/js"
    "time"
)

//GOOS=js GOARCH=wasm go build -o app.wasm main.go
var httpClient = &http.Client{
    Timeout: time.Second * 10,
}

// 导出add函数
// func add(this js.Value, inputs []js.Value) interface{} {
//     a := inputs[0].Int()
//     b := inputs[1].Int()
//     return a + b
// }

// 导出add函数
// func mul(this js.Value, inputs []js.Value) interface{} {
//     a := inputs[0].Int()
//     b := inputs[1].Int()
//     return a * b
// }

func doGet(this js.Value, inputs []js.Value) any {
    u := inputs[0].String()
    u = strings.TrimSpace(u)
    fmt.Println(u)
    if len(u) == 0 {
        return `{"statusCode":500,"res":""}`
    }
    res, err := httpClient.Get(u)
    if err != nil {
        fmt.Println(err)
        return `{"statusCode":500,"res":"3333"}`
    }
    statusCode := res.StatusCode
    resBytes, err := io.ReadAll(res.Body)
    if err != nil {
        fmt.Println(err)
        return fmt.Sprintf(`{"statusCode":%v,"res":"sss"}`, statusCode)
    }

    return fmt.Sprintf(`{"statusCode":%v,"res":"%v"}`, statusCode, string(resBytes))
}

func doG(u string) string {
    res, err := httpClient.Get(u)
    if err != nil {
        fmt.Println(err)
        return `{"statusCode":500,"res":"3333"}`
    }
    statusCode := res.StatusCode
    resBytes, err := io.ReadAll(res.Body)
    if err != nil {
        fmt.Println(err)
        return fmt.Sprintf(`{"statusCode":%v,"res":"sss"}`, statusCode)
    }

    return fmt.Sprintf(`{"statusCode":%v,"res":"%v"}`, statusCode, string(resBytes))
}

func main() {

    // 注册add函数
    // js.Global().Set("add", js.FuncOf(add))
    // js.Global().Set("mul", js.FuncOf(mul))
     js.Global().Set("doGet", js.FuncOf(doGet))
    // s := doG("https://www.zhihu.com")
    // fmt.Println(s)
    c := make(chan struct{}, 0)
    <-c
}

然后在js里面调doGet方法,居然请求不了,哪怕不跨域。
报错:
image.png

阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进