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

Next.js 14.1.0中调用Kysely的Server Action出现await语法错误

错误原因解析

核心语法错误原因

触发SyntaxError: await is only valid in async functions and the top level bodies of modules的本质是你的代码中存在await关键字被用在了非async函数内部的情况,常见场景包括:

  • 在upsertOrganization这个async的Server Action函数内,嵌套了未声明为async的函数(比如普通同步函数、非async的回调函数),并在这些嵌套函数里使用了await。例如:
    export async function upsertOrganization(organization) {
      // 错误示例:then回调未声明为async,内部用了await
      db.someQuery().then(() => {
        await someAsyncOperation(); // 此处会触发SyntaxError
      });
    }
    
  • 调用next-auth的getServerSession()时,将await写在了非async环境中(比如在普通函数内调用await getServerSession(),或者在未启用ES模块的模块顶层使用await)。

Kysely代码的逻辑问题

你当前的Kysely语句仅构建了查询对象,并没有真正执行数据库插入操作:

// 仅构建查询,未执行
db.insertInto('organizations').values({...});

必须调用.execute()(或.returning()等执行类方法)才会触发数据库操作,且该方法返回Promise,必须用await等待完成,否则操作不会执行,还可能引发未处理Promise的问题。正确写法:

await db.insertInto('organizations').values({
  name: 'asdf',
  description: 'asdf',
  createdAt: new Date(),
  updatedAt: new Date(),
}).execute();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:04:51