Подключение к базам данных
Приложениям часто требуется хранить и извлекать данные из баз данных. Deno поддерживает подключение к множеству систем управления базами данных.
Сообщество Deno опубликовало ряд модулей сторонних разработчиков, которые упрощают подключение к популярным базам данных, таким как MySQL, Postgres и MongoDB.
Они размещены на сайте модулей сторонних разработчиков Deno deno.land/x.
MySQL
deno_mysql — драйвер базы данных MySQL и MariaDB для Deno.
Подключение к MySQL с помощью 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
deno-postgres — лёгкий драйвер PostgreSQL для Deno, ориентированный на удобство разработки.
Подключение к Postgres с помощью deno-postgres
Сначала импортируйте Client класс из deno-postgres модуля и создайте новый экземпляр клиента. Затем подключитесь к базе данных, передав объект с данными подключения:
import { Client } from "https://deno.land/x/postgres/mod.ts";
const client = new Client({
user: "user",
database: "dbname",
hostname: "127.0.0.1",
port: 5432,
password: "password",
});
await client.connect();
postgresjs — полнофункциональный клиент Postgres для 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
Для работы с официальным драйвером MongoDB на npm рекомендуется использовать npm-спецификаторы. Подробнее о работе с драйвером можно узнать в официальной документации. Единственное отличие при использовании этого модуля в контексте Deno заключается в том, как вы импортируете модуль с помощью npm: спецификатора.
Импортируйте драйвер MongoDB, настройте конфигурацию подключения, затем подключитесь к экземпляру MongoDB. После этого вы можете выполнять операции, такие как вставка документов в коллекцию, перед закрытием подключения:
import { MongoClient } from "npm:mongodb@6";
const url = "mongodb://localhost:27017";
const client = new MongoClient(url);
const dbName = "myProject";
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);
client.close();
SQLite
Существует два основных решения для подключения к SQLite в Deno:
Подключение к SQLite с помощью модуля FFI
@db/sqlite предоставляет JavaScript-связки к SQLite3 C API, используя Deno FFI.
import { Database } from "jsr:@db/sqlite@0.12";
const db = new Database("test.db");
const [version] = db.prepare("select sqlite_version()").value<[string]>()!;
console.log(version);
db.close();
Подключение к SQLite с помощью оптимизированного Wasm-модуля
sqlite — модуль SQLite для JavaScript и TypeScript. Обёртка разработана специально для Deno и использует версию SQLite3, скомпилированную в WebAssembly (Wasm).
import { DB } from "https://deno.land/x/sqlite/mod.ts";
const db = new DB("test.db");
db.close();
Firebase
Для подключения к Firebase с помощью Deno импортируйте firestore npm-модуль с помощью ESM CDN. Дополнительную информацию об использовании npm-модулей в Deno с CDN можно найти в разделе Использование npm-пакетов с CDN.
Подключение к Firebase с помощью firestore npm-модуля
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
Для подключения к Supabase с помощью Deno импортируйте supabase-js npm-модуль с помощью esm.sh CDN. Дополнительную информацию об использовании npm-модулей в Deno с CDN можно найти в разделе Использование npm-пакетов с CDN.
Подключение к Supabase с помощью supabase-js npm-модуля
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
Object-Relational Mappings (ORM) определяют ваши модели данных как классы, которые можно сохранить в базе данных. Вы можете читать и записывать данные в вашей базе данных через экземпляры этих классов.
Deno поддерживает несколько ORM, включая Prisma и DenoDB.
DenoDB
DenoDB — ORM, специфичный для Deno.
Подключение к 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, к которому ваши клиентские приложения могут обращаться для получения данных.
Сервер
Вы можете использовать gql, универсальный GraphQL HTTP-мидлварь для Deno, для запуска сервера GraphQL API в Deno.
Запуск GraphQL API сервера с помощью gql
import { GraphQLHTTP } from "https://deno.land/x/gql/mod.ts";
import { makeExecutableSchema } from "https://deno.land/x/graphql_tools@0.0.2/mod.ts";
import { gql } from "https://deno.land/x/graphql_tag@0.0.1/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 });
});
Клиент
Для выполнения вызовов GraphQL-клиента в Deno импортируйте graphql npm-модуль с помощью esm CDN. Дополнительную информацию об использовании npm-модулей в Deno через CDN можно найти здесь.
Выполнение вызовов GraphQL-клиента с помощью graphql npm-модуля
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);
🦕 Теперь вы можете подключить свой проект Deno к базе данных, работать с постоянными данными, выполнять операции CRUD и начать разработку более сложных приложений.
© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/tutorials/connecting_to_databases