Spec-Zone.ru › Deno 2

Подключение к базам данных

Приложениям часто требуется хранить и извлекать данные из баз данных. Deno поддерживает подключение к множеству систем управления базами данных.

Сообщество Deno опубликовало ряд модулей сторонних разработчиков, которые упрощают подключение к популярным базам данных, таким как MySQL, Postgres и MongoDB.

Они размещены на сайте модулей сторонних разработчиков Deno deno.land/x.

MySQL

deno_mysql — драйвер базы данных MySQL и MariaDB для Deno.

Подключение к MySQL с помощью deno_mysql

Сначала импортируйте mysql модуль и создайте новый экземпляр клиента. Затем подключитесь к базе данных, передав объект с данными подключения:

main.js
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. После этого вы можете выполнять операции, такие как вставка документов в коллекцию, перед закрытием подключения:

main.js
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API