Как подключиться к локальному экземпляру mongodb из модуля wasm? - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь сохранить некоторые данные в своем локальном экземпляре MongoDB, используя Go, скомпилированный в WebAssembly.Проблема в том, что я даже не могу подключиться к нему.Экземпляр mondog никак не реагирует на соединение с модулем wasm.Эта проблема возникает только при подключении из модуля wasm.Тот же код при обычной компиляции работает нормально, как и соединение из оболочки mongo.Запущенный экземпляр mongod не защищен паролем.

В случае, если это имеет значение, моя ОС - Windows 10.

Я попытался изменить параметр mongod bind_ip с localhost на фактический локальный адрес моей машины.и использовать разные браузеры (Chrome 75.0.3770.80, Opera 60.0.3255.109).Изменение длительности тайм-аута также не помогает.

func connectToMongo(URI string, timeout time.Duration) *mongo.Client {

    ctx, cancel := context.WithTimeout(context.Background(), timeout)
    defer cancel()

    client, err := mongo.Connect(ctx, options.Client().ApplyURI(URI))

    if err != nil {
        log.Fatal(err)
    }

    err = client.Ping(ctx, readpref.Primary())

    if err != nil {
        log.Fatal(err) // It fails here
    }

    return client
}

func main() {
    client := connectToMongo("mongodb://localhost:27017", 20*time.Second)
}

<html>
    <head>
        <script type="text/javascript" src="./wasm_exec.js"></script>
        <script>
            const go = new Go();
            WebAssembly.instantiateStreaming(fetch('main.wasm'),go.importObject).then( res=> {
                go.run(res.instance)    
            })
        </script>
    </head>
</html>

Я запускаю mongod.exe без каких-либо параметров, поэтому он привязан к localhost.

Я ожидал, что мой кодподключиться к экземпляру mongod, но на самом деле я получаю следующую ошибку в консоли браузера: «превышен крайний срок контекста».

Я все еще изучаю Go и новичка в JavaScript, так что я могу упустить что-то очень простое.Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 08 июня 2019

Вы пытаетесь подключиться из WebAssembly к локальному серверу, скорее всего, используя протокол, который не разрешен в изолированной программной среде WASM браузера.

WebAssembly не может, например, открывать низкоуровневые сетевые сокеты из песочницы WASM, вы в основном ограничены тем же, что вы можете делать с JavaScript с точки зрения доступа к файлам, системе и сети при работе WASM в браузере.

Стоит прочитать об ограничениях, которые имеет WebAssembly в отношении безопасности и доступа к системе при использовании в контексте браузера , а также стоит отметить, что здесь блокируется не WebAssembly, а браузер, который запуск веб-сборки.

...