Estoy tratando de crear un cliente SupaDB para Steam, más información . Cuando reviso la consola del sitio web, aparece el siguiente mensaje de error, incluso cuando se usa node file.js , se muestra el mismo error. Cual es el error:
SyntaxError: await solo es válido en funciones asíncronas y los cuerpos de módulos de nivel superior
Como la información proporcionada, el error también incluye que la línea donde ocurre el error es la línea 8 ...
Registro completo:
const { data, error } = await supabase.from("steam").select("*") ^^^^^SyntaxError: await solo es válido en funciones asíncronas y los cuerpos de nivel superior de los módulos en Object.compileFunction (node:vm:352:18) en wrapSafe (node:internal/modules/cjs/loader:1031:15) en Module._compile (node:internal/modules/cjs/loader:1065:27) en Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) en Module.load (node:internal/modules/ cjs/loader:981:32) en Function.Module._load (nodo:internal/modules/cjs/loader:822:12) en Function.executeUserEntryPoint [como runMain] (nodo:internal/modules/run_main:81:12) en el nodo: interno/principal/ejecutar_módulo_principal:17:47
const supabase = createClient("https://gqkuommdmfzmwkzdewma.supabase.co", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imdxa3VvbW1kbWZ6bXdremRld21hIiwicm9sZSI6ImFub24iLCJpYXQiOjE2NDkyNjQyNTIsImV4cCI6MTk2NDg0MDI1Mn0.iF651HDhqynAQRlG8T6wFS3ZEx4dqxHiEiguc0m7-zI", { headers: { Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXQiOiI3MjU5YTg2ZDVlMTE1YTM2ODRjMjdlNGUiLCJpYXQiOjE2NTAyODg1MzJ9.43EriTTwaDLeepFTbRoZXJksqCtIrjMZ-yHHMDuK0_4" } }) const { data, error } = await supabase.from("steam").select("*") if (error) { console.log('Error occurred:', error) } else { console.log(data) } <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <!-- link CSS and JavaScript to HTML --> <link rel="stylesheet" href="style.css"> <script src="code.js"></script> </head> <body> </body> </html>A menos que esté utilizando la última versión de NodeJS que admita la espera de nivel superior, no puede usar await fuera de una función asíncrona.
Puede solucionar esto encapsulando su código en una función IIFE:
(async() => { // your code using await goes here const supabase = createClient("https://gqkuommdmfzmwkzdewma.supabase.co", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imdxa3VvbW1kbWZ6bXdremRld21hIiwicm9sZSI6ImFub24iLCJpYXQiOjE2NDkyNjQyNTIsImV4cCI6MTk2NDg0MDI1Mn0.iF651HDhqynAQRlG8T6wFS3ZEx4dqxHiEiguc0m7-zI", { headers: { Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXQiOiI3MjU5YTg2ZDVlMTE1YTM2ODRjMjdlNGUiLCJpYXQiOjE2NTAyODg1MzJ9.43EriTTwaDLeepFTbRoZXJksqCtIrjMZ-yHHMDuK0_4" } }) const { data, error } = await supabase.from("steam").select("*") if (error) console.log('Error occurred:', error) else console.log(data) })()await solo es válido en funciones asíncronas
Esto significa que solo puede usar await si su función es async . En este momento solo está usando la palabra clave await sin async
let dummyMethod = async () => { const supabase = createClient("https://gqkuommdmfzmwkzdewma.supabase.co", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imdxa3VvbW1kbWZ6bXdremRld21hIiwicm9sZSI6ImFub24iLCJpYXQiOjE2NDkyNjQyNTIsImV4cCI6MTk2NDg0MDI1Mn0.iF651HDhqynAQRlG8T6wFS3ZEx4dqxHiEiguc0m7-zI", { headers: { Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXQiOiI3MjU5YTg2ZDVlMTE1YTM2ODRjMjdlNGUiLCJpYXQiOjE2NTAyODg1MzJ9.43EriTTwaDLeepFTbRoZXJksqCtIrjMZ-yHHMDuK0_4" } }) const { data, error } = await supabase.from("steam").select("*") if (error) { console.log('Error occurred:', error) } else { console.log(data) } } <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <!-- link CSS and JavaScript to HTML --> <link rel="stylesheet" href="style.css"> <script src="code.js"></script> </head> <body> </body> </html> Ahora no obtendrá un mensaje de error. Dado que estamos envolviendo su await en el método async .
Nada se registrará en la consola, ya que no estoy llamando al dummyMethod .
Puede agregar un "tipo": "módulo" en su archivo package.json y eso le permitirá usar la espera de nivel superior