Почему мой код sapper backend выполняется в моем браузере? - PullRequest
0 голосов
/ 09 июля 2020

Итак, я пытаюсь сделать несколько вызовов dockerized api с моего сервера sapper, используя aw ios, и передать результат в браузер. Мои вызовы предоставляются файлом "call. js".

Мой "index.svelte" выглядит так:

<script context="module">
  import * as calls from "./../../utils/calls.js";

  export async function preload({ params, query }) {
    try{
      
    let response = await calls.getStripePub();
    return { api_key: response.data.key };

    }catch(e){
      console.log(e, "error")
      this.error(500, "Oops, unexpected error there");
      
    }
  }
</script>

<script>
  import Payplace from "./../../components/payplace/Payplace.svelte";

  export let api_key;
</script>

<Payplace {api_key} />

И мои вызовы. js это:

import axios from "axios";

let backend = process.env.IP_BACK
let api_key = `${process.env.API_KEY_NAME}=${process.env.API_KEY}`

export async function getStripePub(){
    console.log(`http://${backend}/stripe/getkeypub/?${api_key}`);
    return await axios.get(`http://${backend}/stripe/getkeypub/?${api_key}`);
}

Код работает на стороне сервера, но он также выполняется в моем браузере, который отображает

process is not defined

Кроме того, файл index. js, загруженный моим браузером, содержит

let backend = process.env.IP_BACK;
let api_key = `${process.env.API_KEY_NAME}=${process.env.API_KEY}`;

async function getStripePub(){
    console.log(`http://${backend}/stripe/getkeypub/?${api_key}`);
    return await axios$1.get(`http://${backend}/stripe/getkeypub/?${api_key}`);
}

Почему мой код выполняется моим браузером, когда он находится в теге скрипта context = 'module'?

1 Ответ

2 голосов
/ 09 июля 2020

Что ж, ваш код находится в браузере, потому что <script context="module"> запускается до создания компонента как на сервере, так и на клиенте . Кроме того, не должно быть никаких переменных среды, поскольку они могут быть прочитаны:

не должны ссылаться на какие-либо ключи или секреты API, которые будут доступны клиенту

Итак, я думаю, вы могли бы попробовать Server Routes или использовать функцию onMount , которая работает только на клиенте.

...