You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用await调用Supabase查询时出现SyntaxError错误求助

问题

尝试通过邮箱从Supabase数据库获取用户信息,在app.js中执行console.log(await db.getUserByEmail("email@gmail.com"))时触发语法错误:SyntaxError: missing ) after argument list。Node.js版本为v19.3.0,已排除版本过低问题。

app.js 代码片段

console.log(await db.getUserByEmail("email@gmail.com"))

database.js 完整代码

// Initialize Supabase
const { createClient } =  require('@supabase/supabase-js')
require("dotenv").config({path: "./index.config"})

const supabaseUrl = process.env.SUPABASE_URL
const supabaseKey = process.env.SUPABASE_KEY
const supabase = createClient(supabaseUrl, supabaseKey)

class database {

    static async fetchUsers() {

        const {data, error} = await supabase
        .from("users")
        .select();
        
        if(error) {
            console.error(error);
        }
        if(data) {
            console.log(data)
        }
    }

    static async createUser(email, hashedPassword, gender) {

        const { data, error } = await supabase
            .from('users')
            .insert([{ email: email, hashedPassword: hashedPassword, gender: gender },]);
        
        if(error) {
            console.error(error);
        }
    }

    static async emailExists(email) {

        const {data, error} = await supabase
        .from("users")
        .select("email");
        
        if(error) {
            console.error(error);
            return true;
        }
        if(data) {
            for (let i = 0; i < data.length; i++) {
                console.log("["+i+"] " + data[i].email + " : " + "["+i+"] " + email)
                
                if(data[i].email == email) {
                    return true;
                }
            }
            return false;
        }

        return true;
    }

    static async getUserByEmail(email) {

        const {data, error} = await supabase
        .from("users")
        .select();
        
        if(error) {
            console.error(error);
            return null
        }
        if(data) {
            data.forEach(user => {
                if(user.email == email) {
                    console.log(user.email)
                    console.log(email)
                    console.log(user)
                    return user
                }
            })
            return null
        }

        return null
    }
}

module.exports = database;

错误堆栈信息

SyntaxError: missing ) after argument list
at internalCompileFunction (node:internal/vm:74:18)
at wrapSafe (node:internal/modules/cjs/loader:1141:20)
at Module._compile (node:internal/modules/cjs/loader:1182:27)
at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
at Module.load (node:internal/modules/cjs/loader:1081:32)
at Module._load (node:internal/modules/cjs/loader:922:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:82:12)
at node:internal/main/run_main_module:23:47
解决方案

1. 修复语法错误核心原因

await 只能在async函数或者ES模块顶级作用域中使用。如果app.js是默认的CommonJS模块,顶级作用域不能直接使用await,需要将代码包裹在async函数内:

修改app.js:

// 方式1:定义async函数并调用
async function getUser() {
  console.log(await db.getUserByEmail("email@gmail.com"));
}
getUser();

// 方式2:立即执行async函数
(async () => {
  console.log(await db.getUserByEmail("email@gmail.com"));
})();

2. 修复getUserByEmail方法的逻辑问题

当前getUserByEmail存在两个问题:一是forEach中的return无法跳出循环或返回值,导致永远返回null;二是全表查询效率低下。直接用Supabase的过滤条件优化:

修改database.js中的getUserByEmail方法:

static async getUserByEmail(email) {
  const { data, error } = await supabase
    .from("users")
    .select()
    .eq("email", email) // 直接添加邮箱过滤,只查询目标数据
    .single(); // 若邮箱是唯一标识,用single()返回单个对象而非数组

  if (error) {
    console.error(error);
    return null;
  }
  return data;
}

3. 优化emailExists方法(可选)

同样,emailExists无需全表查询,直接用过滤条件判断存在性更高效:

static async emailExists(email) {
  const { count, error } = await supabase
    .from("users")
    .select("email", { count: 'exact', head: true })
    .eq("email", email);

  if (error) {
    console.error(error);
    return true;
  }
  return count > 0;
}

内容的提问来源于stack exchange,提问作者marcel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:21:07