跳至內容
從 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 繼承 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>

建立一個刪除查詢。

請參閱 DeleteQueryBuilder.where 方法,了解如何為刪除操作指定 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 的實例。如果資料庫傳回自動遞增的 id,InsertResult 會有 InsertResult.insertId | insertId 欄位,該欄位會保存插入列的自動遞增 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>

建立一個取代查詢。

一個僅限 MySQL 的陳述式,類似於 InsertQueryBuilder.onDuplicateKeyUpdate,會在衝突時刪除並插入值,而不是更新現有列。

此查詢的傳回值是 InsertResult 的實例。如果資料庫傳回自動遞增的 id,InsertResult 會有 InsertResult.insertId | insertId 欄位,該欄位會保存插入列的自動遞增 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 子句。

範例

為一個表格建立選取查詢

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

產生的 SQL (PostgreSQL)

select * from "person"

為具有別名的表格建立選取查詢

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"

從子查詢建立選取查詢

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 建立選取查詢

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>

建立一個更新查詢。

請參閱 UpdateQueryBuilder.where 方法,以取得如何為更新操作指定 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"
參數
參數類型
schema字串
回傳值

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;

Codegen

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>

回傳

介面卡 (Adapter)

Auth.js © Balázs Orbán 和團隊 -2024