跳过到主要内容

连接到数据库

Deno 社区发布了许多第三方模块,可以轻松连接到流行的数据库,如 MySQL、Postgres 和 MongoDB。

它们托管在 Deno 的第三方模块站点 deno.land/x 上。

MySQL

deno_mysql 是 Deno 的 MySQL 和 MariaDB 数据库驱动程序。

使用 deno_mysql 连接到 MySQL

import { Client } from "https://deno.land/x/mysql/mod.ts";

const client = await new Client().connect({
hostname: "127.0.0.1",
username: "root",
db: "dbname",
password: "password",
});

Postgres

postgresjs 是 Node.js 和 Deno 的完整功能的 Postgres 客户端。

使用 postgresjs 连接到 Postgres

import postgres from "https://deno.land/x/postgresjs/mod.js";

const sql = postgres("postgres://username:password@host:port/database");

MongoDB

我们建议使用 npm 指定符 来使用官方的 npm 上的 MongoDB 驱动程序。您可以在 官方文档 中了解有关如何使用驱动程序的更多信息。在 Deno 的上下文中使用此模块的唯一区别是您将如何使用 npm: 指定符导入模块。

使用 npm 指定符导入 MongoDB 驱动程序
// Import the latest major version of the MongoDB driver
import { MongoClient } from "npm:mongodb@6";

// Configure a MongoDB client
const url = "mongodb://127.0.0.1:27017";
const client = new MongoClient(url);
const dbName = "myProject";

// Connect to a MongoDB instance
await client.connect();
console.log("Connected successfully to server");

// Get a reference to a collection
const db = client.db(dbName);
const collection = db.collection("documents");

// Execute an insert operation
const insertResult = await collection.insertMany([{ a: 1 }, { a: 2 }]);
console.log("Inserted documents =>", insertResult);

// Close the connection
client.close();

SQLite

在 Deno 中连接到 SQLite 有两种主要解决方案

使用 FFI 模块连接到 SQLite

sqlite3 使用 Deno FFI 为 SQLite3 C API 提供 JavaScript 绑定。

import { Database } from "https://deno.land/x/sqlite3@LATEST_VERSION/mod.ts";

const db = new Database("test.db");

db.close();

使用 WASM 优化模块连接到 SQLite

sqlite 是一个用于 JavaScript 和 TypeScript 的 SQLite 模块。该包装器专门为 Deno 制作,并使用编译为 WebAssembly (WASM) 的 SQLite3 版本。

import { DB } from "https://deno.land/x/sqlite/mod.ts";

const db = new DB("test.db");

db.close();

Firebase

要使用 Deno 连接到 Firebase,请使用 skypak CDN 导入 firestore npm 模块。要了解有关在 Deno 中使用 CDN 的 npm 模块的更多信息,请参阅 使用 CDN 的 npm 包

使用 firestore npm 模块连接到 Firebase

import { initializeApp } from "https://www.gstatic.com/firebasejs/9.8.1/firebase-app.js";

import {
addDoc,
collection,
connectFirestoreEmulator,
deleteDoc,
doc,
Firestore,
getDoc,
getDocs,
getFirestore,
query,
QuerySnapshot,
setDoc,
where,
} from "https://www.gstatic.com/firebasejs/9.8.1/firebase-firestore.js";

import { getAuth } from "https://www.gstatic.com/firebasejs/9.8.1/firebase-auth.js";

const app = initializeApp({
apiKey: Deno.env.get("FIREBASE_API_KEY"),
authDomain: Deno.env.get("FIREBASE_AUTH_DOMAIN"),
projectId: Deno.env.get("FIREBASE_PROJECT_ID"),
storageBucket: Deno.env.get("FIREBASE_STORAGE_BUCKET"),
messagingSenderId: Deno.env.get("FIREBASE_MESSING_SENDER_ID"),
appId: Deno.env.get("FIREBASE_APP_ID"),
measurementId: Deno.env.get("FIREBASE_MEASUREMENT_ID"),
});
const db = getFirestore(app);
const auth = getAuth(app);

Supabase

要使用 Deno 连接到 Supabase,请使用 esm.sh CDN 导入 supabase-js npm 模块。要了解有关在 Deno 中使用 CDN 的 npm 模块的更多信息,请参阅 使用 CDN 的 npm 包

使用 supabase-js npm 模块连接到 Supabase

import { createClient } from "https://esm.sh/@supabase/supabase-js";

const options = {
schema: "public",
headers: { "x-my-custom-header": "my-app-name" },
autoRefreshToken: true,
persistSession: true,
detectSessionInUrl: true,
};

const supabase = createClient(
"https://xyzcompany.supabase.co",
"public-anon-key",
options,
);

ORM

对象关系映射 (ORM) 将您的数据模型定义为您可以持久保存到数据库的类。您可以通过这些类的实例读取和写入数据库中的数据。

Deno 支持多种 ORM,包括 Prisma 和 DenoDB。

DenoDB

DenoDB 是一个专门针对 Deno 的 ORM。

连接到 DenoDB

import {
Database,
DataTypes,
Model,
PostgresConnector,
} from "https://deno.land/x/denodb/mod.ts";

const connection = new PostgresConnector({
host: "...",
username: "user",
password: "password",
database: "airlines",
});

const db = new Database(connection);

GraphQL

GraphQL 是一种 API 查询语言,通常用于将不同的数据源组合成以客户端为中心的 API。要设置 GraphQL API,您首先需要设置 GraphQL 服务器。该服务器将您的数据公开为 GraphQL API,您的客户端应用程序可以查询该 API 以获取数据。

服务器

您可以使用 gql(一个通用的 Deno GraphQL HTTP 中间件)在 Deno 中运行 GraphQL API 服务器。

使用 gql 运行 GraphQL API 服务器

import { GraphQLHTTP } from "https://deno.land/x/gql/mod.ts";
import { makeExecutableSchema } from "https://deno.land/x/[email protected]/mod.ts";
import { gql } from "https://deno.land/x/[email protected]/mod.ts";

const typeDefs = gql`
type Query {
hello: String
}
`;

const resolvers = {
Query: {
hello: () => `Hello World!`,
},
};

const schema = makeExecutableSchema({ resolvers, typeDefs });

Deno.serve({ port: 3000 }, async () => {
const { pathname } = new URL(req.url);

return pathname === "/graphql"
? await GraphQLHTTP<Request>({
schema,
graphiql: true,
})(req)
: new Response("Not Found", { status: 404 });
});

客户端

要在 Deno 中进行 GraphQL 客户端调用,请使用 graphql npm 模块esm CDN。要了解有关通过 CDN 在 Deno 中使用 npm 模块的更多信息,请阅读 此处

使用 graphql npm 模块进行 GraphQL 客户端调用

import { buildSchema, graphql } from "https://esm.sh/graphql";

const schema = buildSchema(`
type Query {
hello: String
}
`);

const rootValue = {
hello: () => {
return "Hello world!";
},
};

const response = await graphql({
schema,
source: "{ hello }",
rootValue,
});

console.log(response);