跳至内容
从 NextAuth.js v4 迁移? 阅读 我们的迁移指南.
API 参考@auth/kysely-adapter

@auth/kysely-adapter

Auth.js / NextAuth.js 的官方 Kysely 适配器。

安装

npm install kysely @auth/kysely-adapter

KyselyAuth<DB, T>

围绕原始 Kysely 类进行包装,以便验证传入的数据库接口。也可以使用常规的 Kysely 实例,但将其包装可以确保数据库接口实现 Auth.js 所需的字段。当与 kysely-codegen 一起使用时,可以将 Codegen 类型作为第二个泛型参数传递。将使用生成的类型,而 KyselyAuth 将只验证是否存在正确的字段。

扩展

  • Kysely<DB>

类型参数

类型参数
DB extends T-
T数据库

构造函数

new KyselyAuth(args)

new KyselyAuth<DB, T>(args): KyselyAuth<DB, T>
参数
参数类型
argsKyselyConfig
返回值

KyselyAuth<DB, T>

从继承

Kysely<DB>.constructor

new KyselyAuth(args)

new KyselyAuth<DB, T>(args): KyselyAuth<DB, T>
参数
参数类型
argsKyselyProps
返回值

KyselyAuth<DB, T>

从继承

Kysely<DB>.constructor

属性

#private

private #private: any;
从继承

Kysely.#private

#private

private #private: any;
从继承

Kysely.#private

访问器

dynamic

get dynamic(): DynamicModule

返回 DynamicModule 模块。

DynamicModule 模块可用于绕过严格类型检查并传入查询的动态值。

返回值

DynamicModule

fn

get fn(): FunctionModule<DB, keyof DB>

返回一个 FunctionModule,可用于编写类型安全的函数调用。

const { count } = db.fn
 
await db.selectFrom('person')
  .innerJoin('pet', 'pet.owner_id', 'person.id')
  .select([
    'person.id',
    count('pet.id').as('pet_count')
  ])
  .groupBy('person.id')
  .having(count('pet.id'), '>', 10)
  .execute()

生成的 SQL(PostgreSQL)

select "person"."id", count("pet"."id") as "pet_count"
from "person"
inner join "pet" on "pet"."owner_id" = "person"."id"
group by "person"."id"
having count("pet"."id") > $1
返回值

FunctionModule<DB, keyof DB>

introspection

get introspection(): DatabaseIntrospector

返回一个 DatabaseIntrospector | 数据库自省器。

返回值

DatabaseIntrospector

isTransaction

get isTransaction(): boolean

如果此 Kysely 实例是事务,则返回 true。

您也可以使用 db instanceof Transaction

返回值

boolean

schema

get schema(): SchemaModule

返回用于构建数据库架构的 SchemaModule 模块。

返回值

SchemaModule

方法

connection()

connection(): ConnectionBuilder<DB>

提供一个绑定到单个数据库连接的 kysely 实例。

示例

await db
  .connection()
  .execute(async (db) => {
    // `db` is an instance of `Kysely` that's bound to a single
    // database connection. All queries executed through `db` use
    // the same connection.
    await doStuff(db)
  })
返回值

ConnectionBuilder<DB>

从继承

Kysely.connection

deleteFrom()

deleteFrom(from)
deleteFrom<TR>(from): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>

创建删除查询。

有关如何为删除操作指定 where 子句的示例,请参阅 DeleteQueryBuilder.where 方法。

查询的返回值是 DeleteResult 的实例。

示例

删除 id 为 1 的人

const result = await db
  .deleteFrom('person')
  .where('person.id', '=', 1)
  .executeTakeFirst()
 
console.log(result.numDeletedRows)

生成的 SQL(PostgreSQL)

delete from "person" where "person"."id" = $1

某些数据库(如 MySQL)支持从多个表中删除数据

const result = await db
  .deleteFrom(['person', 'pet'])
  .using('person')
  .innerJoin('pet', 'pet.owner_id', '=', 'person.id')
  .where('person.id', '=', 1)
  .executeTakeFirst()

生成的 SQL(MySQL)

delete from `person`, `pet`
using `person`
inner join `pet` on `pet`.`owner_id` = `person`.`id`
where `person`.`id` = ?
类型参数
类型参数
TR 扩展 string
参数
参数类型
fromTR[]
返回值

DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>

继承自

Kysely.deleteFrom

deleteFrom(tables)
deleteFrom<TR>(tables): DeleteQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, DeleteResult>
类型参数
类型参数
TR 扩展 string | AliasedExpression<any, any>
参数
参数类型
tablesTR[]
返回值

DeleteQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, DeleteResult>

继承自

Kysely.deleteFrom

deleteFrom(from)
deleteFrom<TR>(from): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>
类型参数
类型参数
TR 扩展 string
参数
参数类型
fromTR
返回值

DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>

继承自

Kysely.deleteFrom

deleteFrom(table)
deleteFrom<TR>(table): DeleteQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, DeleteResult>
类型参数
类型参数
TR 扩展 string | AliasedExpression<any, any>
参数
参数类型
tableTR
返回值

DeleteQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, DeleteResult>

继承自

Kysely.deleteFrom

destroy()

destroy(): Promise<void>

释放所有资源并断开与数据库的连接。

当您完成对 Kysely 实例的使用时,需要调用此方法。

返回值

Promise<void>

继承自

Kysely.destroy

executeQuery()

executeQuery<R>(query, queryId?): Promise<QueryResult<R>>

执行给定的已编译查询或查询构建器。

有关更多信息,请参阅 拆分构建、编译和执行代码食谱

类型参数
类型参数
R
参数
参数类型
queryCompiledQuery<R> | Compilable<R>
queryId?QueryId
返回值

Promise<QueryResult<R>>

继承自

Kysely.executeQuery

insertInto()

insertInto<T>(table): InsertQueryBuilder<DB, T, InsertResult>

创建插入查询。

此查询的返回值是 InsertResult 的实例。InsertResult 具有 InsertResult.insertId | insertId 字段,该字段保存插入行的自增 ID(如果数据库返回了一个 ID)。

有关更多信息和示例,请参阅 InsertQueryBuilder.values | values 方法。此外,请参阅 ReturningInterface.returning | returning 方法,该方法可用于在受支持的数据库(如 PostgreSQL)上返回列。

示例

const result = await db
  .insertInto('person')
  .values({
    first_name: 'Jennifer',
    last_name: 'Aniston'
  })
  .executeTakeFirst()
 
console.log(result.insertId)

一些数据库(如 PostgreSQL)支持 returning 方法

const { id } = await db
  .insertInto('person')
  .values({
    first_name: 'Jennifer',
    last_name: 'Aniston'
  })
  .returning('id')
  .executeTakeFirst()
类型参数
类型参数
T 扩展 string
参数
参数类型
tableT
返回值

InsertQueryBuilder<DB, T, InsertResult>

继承自

Kysely.insertInto

replaceInto()

replaceInto<T>(table): InsertQueryBuilder<DB, T, InsertResult>

创建替换查询。

类似于 InsertQueryBuilder.onDuplicateKeyUpdate 的 MySQL 独有语句,它在冲突时删除并插入值,而不是更新现有行。

此查询的返回值是 InsertResult 的实例。InsertResult 具有 InsertResult.insertId | insertId 字段,该字段保存插入行的自增 ID(如果数据库返回了一个 ID)。

有关更多信息和示例,请参阅 InsertQueryBuilder.values | values 方法。

示例

const result = await db
  .replaceInto('person')
  .values({
    first_name: 'Jennifer',
    last_name: 'Aniston'
  })
  .executeTakeFirst()
 
console.log(result.insertId)
类型参数
类型参数
T 扩展 string
参数
参数类型
tableT
返回值

InsertQueryBuilder<DB, T, InsertResult>

继承自

Kysely.replaceInto

selectFrom()

selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>

为给定表或表创建 select 查询构建器。

传递给此方法的表作为查询的 from 子句构建。

示例

为一个表创建一个 select 查询

db.selectFrom('person').selectAll()

生成的 SQL(PostgreSQL)

select * from "person"

为一个带有别名的表创建一个 select 查询

const persons = await db.selectFrom('person as p')
  .select(['p.id', 'first_name'])
  .execute()
 
console.log(persons[0].id)

生成的 SQL(PostgreSQL)

select "p"."id", "first_name" from "person" as "p"

从子查询创建 select 查询

const persons = await db.selectFrom(
    (eb) => eb.selectFrom('person').select('person.id as identifier').as('p')
  )
  .select('p.identifier')
  .execute()
 
console.log(persons[0].identifier)

生成的 SQL(PostgreSQL)

select "p"."identifier",
from (
  select "person"."id" as "identifier" from "person"
) as p

从原始 SQL 创建 select 查询

import { sql } from 'kysely'
 
const items = await db
  .selectFrom(sql<{ one: number }>`(select 1 as one)`.as('q'))
  .select('q.one')
  .execute()
 
console.log(items[0].one)

生成的 SQL(PostgreSQL)

select "q"."one",
from (
  select 1 as one
) as q

使用 sql 标签时,还需要提供原始代码段/查询的结果类型,以便 Kysely 可以确定哪些列可用于查询的其余部分。

selectFrom 方法还接受用于多个表的数组。上述所有示例也可以在数组中使用。

import { sql } from 'kysely'
 
const items = await db.selectFrom([
    'person as p',
    db.selectFrom('pet').select('pet.species').as('a'),
    sql<{ one: number }>`(select 1 as one)`.as('q')
  ])
  .select(['p.id', 'a.species', 'q.one'])
  .execute()

生成的 SQL(PostgreSQL)

select "p".id, "a"."species", "q"."one"
from
  "person" as "p",
  (select "pet"."species" from "pet") as a,
  (select 1 as one) as "q"
类型参数
类型参数
TE 扩展 string
参数
参数类型
fromTE[]
返回值

SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>

继承自

Kysely.selectFrom

selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<From<DB, TE>, ExtractAliasFromTableExpression<DB, TE>, {}>
类型参数
类型参数
TE 扩展 string | AliasedExpression<any, any> | AliasedExpressionFactory<DB, keyof DB>
参数
参数类型
fromTE[]
返回值

SelectQueryBuilder<From<DB, TE>, ExtractAliasFromTableExpression<DB, TE>, {}>

继承自

Kysely.selectFrom

selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>
类型参数
类型参数
TE 扩展 string
参数
参数类型
fromTE
返回值

SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>

继承自

Kysely.selectFrom

selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB, TE>, {}>
类型参数
类型参数
TE 扩展 ${string} as ${string}
参数
参数类型
fromTE
返回值

SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB, TE>, {}>

继承自

Kysely.selectFrom

selectFrom(from)
selectFrom<TE>(from): SelectQueryBuilder<From<DB, TE>, ExtractAliasFromTableExpression<DB, TE>, {}>
类型参数
类型参数
TE 扩展 string | AliasedExpression<any, any> | AliasedExpressionFactory<DB, keyof DB>
参数
参数类型
fromTE
返回值

SelectQueryBuilder<From<DB, TE>, ExtractAliasFromTableExpression<DB, TE>, {}>

继承自

Kysely.selectFrom

transaction()

transaction(): TransactionBuilder<DB>

创建一个 TransactionBuilder,可用于在事务中运行查询。

返回的 TransactionBuilder 可用于配置事务。然后可以调用 TransactionBuilder.execute 方法来运行事务。TransactionBuilder.execute 接受在事务中运行的函数。如果函数抛出异常,则回滚事务。否则,提交事务。

传递给 TransactionBuilder.execute | execute 方法的回调函数仅将事务对象作为其参数。事务类型为 Transaction,它继承自 Kysely。通过事务对象启动的任何查询都在事务内执行。

示例

const catto = await db.transaction().execute(async (trx) => {
  const jennifer = await trx.insertInto('person')
    .values({
      first_name: 'Jennifer',
      last_name: 'Aniston',
    })
    .returning('id')
    .executeTakeFirstOrThrow()
 
  await someFunction(trx, jennifer)
 
  return await trx.insertInto('pet')
    .values({
      user_id: jennifer.id,
      name: 'Catto',
      species: 'cat'
    })
    .returning('*')
    .executeTakeFirst()
})

设置隔离级别

await db
  .transaction()
  .setIsolationLevel('serializable')
  .execute(async (trx) => {
    await doStuff(trx)
  })
返回值

TransactionBuilder<DB>

继承自

Kysely.transaction

updateTable()

updateTable(table)
updateTable<TR>(table): UpdateQueryBuilder<DB, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>

创建一个更新查询。

有关如何为更新操作指定 where 子句的示例,请参见 UpdateQueryBuilder.where 方法。

有关如何指定更新的示例,请参见 UpdateQueryBuilder.set 方法。

查询的返回值为 UpdateResult。

示例

const result = await db
  .updateTable('person')
  .set({ first_name: 'Jennifer' })
  .where('person.id', '=', 1)
  .executeTakeFirst()
 
console.log(result.numUpdatedRows)
类型参数
类型参数
TR 扩展 string
参数
参数类型
tableTR
返回值

UpdateQueryBuilder<DB, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>

继承自

Kysely.updateTable

updateTable(table)
updateTable<TR>(table): UpdateQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>
类型参数
类型参数
TR extends ${string} as ${string}
参数
参数类型
tableTR
返回值

UpdateQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>

继承自

Kysely.updateTable

updateTable(table)
updateTable<TR>(table): UpdateQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, UpdateResult>
类型参数
类型参数
TR 扩展 string | AliasedExpression<any, any>
参数
参数类型
tableTR
返回值

UpdateQueryBuilder<From<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, ExtractAliasFromTableExpression<DB, TR>, UpdateResult>

继承自

Kysely.updateTable

with()

with<N, E>(name, expression): QueryCreatorWithCommonTableExpression<DB, N, E>

创建一个 with 查询(公用表表达式)。

示例

await db
  .with('jennifers', (db) => db
    .selectFrom('person')
    .where('first_name', '=', 'Jennifer')
    .select(['id', 'age'])
  )
  .with('adult_jennifers', (db) => db
    .selectFrom('jennifers')
    .where('age', '>', 18)
    .select(['id', 'age'])
  )
  .selectFrom('adult_jennifers')
  .where('age', '<', 60)
  .selectAll()
  .execute()

CTE 名称可以选择性地指定列名,除了名称之外。在这种情况下,Kysely 要求表达式返回具有相同列的行。

await db
  .with('jennifers(id, age)', (db) => db
    .selectFrom('person')
    .where('first_name', '=', 'Jennifer')
    // This is ok since we return columns with the same
    // names as specified by `jennifers(id, age)`.
    .select(['id', 'age'])
  )
  .selectFrom('jennifers')
  .selectAll()
  .execute()
类型参数
类型参数
N extends string
E extends CommonTableExpression<DB, N>
参数
参数类型
nameN
expressionE
返回值

QueryCreatorWithCommonTableExpression<DB, N, E>

继承自

Kysely.with

withPlugin()

withPlugin(plugin): Kysely<DB>

返回安装了给定插件的此 Kysely 实例的副本。

参数
参数类型
pluginKyselyPlugin
返回值

Kysely<DB>

继承自

Kysely.withPlugin

withRecursive()

withRecursive<N, E>(name, expression): QueryCreatorWithCommonTableExpression<DB, N, E>

创建一个递归 with 查询(公用表表达式)。

有关示例和更多文档,请参见 with 方法。

类型参数
类型参数
N extends string
E extends RecursiveCommonTableExpression<DB, N>
参数
参数类型
nameN
expressionE
返回值

QueryCreatorWithCommonTableExpression<DB, N, E>

继承自

Kysely.withRecursive

withSchema()

withSchema(schema): QueryCreator<DB>

设置所有未显式指定模式的表引用的模式。

这仅影响通过此方法返回的构建器创建的查询,不会修改 db 实例。

有关更详细的说明,请参见 此食谱

示例

await db
  .withSchema('mammals')
  .selectFrom('pet')
  .selectAll()
  .innerJoin('public.person', 'public.person.id', 'pet.owner_id')
  .execute()

生成的 SQL(PostgreSQL)

select * from "mammals"."pet"
inner join "public"."person"
on "public"."person"."id" = "mammals"."pet"."owner_id"

withSchema 足够聪明,不会为别名、公用表表达式或其他模式不属于的区域添加模式

await db
  .withSchema('mammals')
  .selectFrom('pet as p')
  .select('p.name')
  .execute()

生成的 SQL(PostgreSQL)

select "p"."name" from "mammals"."pet" as "p"
参数
参数类型
schemastring
返回值

QueryCreator<DB>

继承自

Kysely.withSchema

withTables()

withTables<T>(): Kysely<DB & T>

返回一个包含已添加到其数据库类型的表的此 Kysely 实例的副本。

此方法仅修改类型,不会以任何方式影响任何执行的查询。

示例

以下示例添加并使用了一个临时表

类型参数
类型参数
T extends Record<string, Record<string, any>>
返回值

Kysely<DB & T>

继承自

Kysely.withTables

示例
await db.schema
  .createTable('temp_table')
  .temporary()
  .addColumn('some_column', 'integer')
  .execute()
 
const tempDb = db.withTables<{
  temp_table: {
    some_column: number
  }
}>()
 
await tempDb
  .insertInto('temp_table')
  .values({ some_column: 100 })
  .execute()

withoutPlugins()

withoutPlugins(): Kysely<DB>

返回不包含任何插件的此 Kysely 实例的副本。

返回值

Kysely<DB>

继承自

Kysely.withoutPlugins


数据库

属性

帐户

Account: AdapterAccount;

会话

Session: AdapterSession;

用户

User: AdapterUser;

验证令牌

VerificationToken: VerificationToken;

代码生成

type Codegen: { [K in keyof Database]: { [J in keyof Database[K]]: unknown } };

格式

const format: {
  from: T;
  to: T;
};

类型声明

from()

类型参数
类型参数
T
参数
参数类型
object?Record<string, any>
返回值

T

to()

类型参数
类型参数
T
参数
参数类型
objectRecord<string, any>
返回值

T


KyselyAdapter()

KyselyAdapter(db): Adapter

参数

参数类型
dbKysely<Database>

返回值

适配器

Auth.js © Balázs Orbán 和团队 -2024