DevGang
Авторизоваться

Настройка MongoDB в Deno 

Deno - это простая и безопасная среда выполнения для JavaScript, которая по умолчанию поддерживает и настраивает TypeScript. MongoDB - это кроссплатформенная программа базы данных, ориентированная на документы, которая широко используется разработчиками. В этой статье мы узнаем, как интегрировать MongoDB в наше приложение Deno.

Предпосылки

  1. Знакомство с TypeScript
  2. VS Code или любой редактор кода, установленный на вашем компьютере.
  3. Базовые знания MongoDB.
  4. POSTMAN установлен на локальной машине.

Прежде чем мы начнем, убедитесь, что на вашем локальном компьютере установлен Deno. Если вы используете Mac и еще не установили его, откройте терминал и выполните эту команду:

brew install deno

Если вы используете компьютер Windows, вы можете установить его, выполнив эту команду на своем терминале:

iwr https://deno.land/x/install/install.ps1 -useb | iex

Или, если у вас установлен Chocolatey, вы можете запустить:

choco install deno

Приступим

Мы начнем с создания файла server.js, а затем настроим наш сервер Deno. Поскольку нет файла package.json, как в Node.js, Deno использует ссылки на модули по URL-адресам или путям к файлам.

import { Application, Router } from "https://deno.land/x/oak/mod.ts";
const app = new Application();
const router = new Router();
const PORT = 3000;
router
  .get("/", (ctx) => {
    ctx.response.body = "This is the home route";
  });
app.use(router.routes());
app.use(router.allowedMethods());
app.listen({ port: PORT });

Мы используем Oak для запуска нашего сервера. Oak - это среда промежуточного программного обеспечения Deno для HTTP-серверов, которая также включает промежуточное программное обеспечение маршрутизатора.

Теперь мы можем запустить на нашем терминале команду node run --allow-net server.ts для обслуживания нашего приложения. Из-за безопасности Deno нам нужно добавить --allow-net для запуска сервера. Мы можем найти приложение в нашем браузере на localhost:8000.

Теперь, когда наш сервер запущен и работает, мы можем приступить к настройке MongoDB в нашем приложении. Создайте файл db.js, в котором мы будем настраивать нашу конфигурацию БД:

// import the package from url
import { init, MongoClient } from "https://deno.land/x/mongo@v0.12.1/mod.ts";
// Intialize the plugin
await init();
// Create client
const client = new MongoClient();
// Connect to mongodb
client.connectWithUri("mongodb://localhost:27017");
// Give your database a name
const dbname: string = "denoMongoApp";
const db = client.database(dbname);
// Declare the mongodb collections here. Here we are using only one collection (i.e user).
// Defining schema interface
interface UserSchema {
  _id: { $oid: string };
  name: string;
  email: string;
  phone: string;
}
const User = db.collection<UserSchema>("user");
export { db, User };

Здесь мы импортируем плагин, а затем инициализируем его. Мы создаем экземпляр mongoClient, а затем подключаем его к MongoDB. Мы создали коллекцию User, которую будем использовать для тестирования нашей конфигурации Mongo. Мы также определяем интерфейс TypeScript для модели MongoDB, который будет принимать имя, адрес электронной почты, телефон и сгенерированный Mongo ID.

Теперь, когда это настроено, мы создадим простое приложение CRUD для его тестирования. Чтобы сделать наше приложение более масштабируемым, нам нужно создать файлы routes.ts и controller.ts. Наш файл routes.ts будет обрабатывать наши маршруты, а файл controller.ts будет обрабатывать нашу логику MongoDB.

Наш файл routes.ts должен выглядеть так:

import { Router } from "https://deno.land/x/oak/mod.ts";
import { getUsers, createUser } from "./controller.ts";
const router = new Router();
router
  .get("/", (ctx) => {
    ctx.response.body = "This is the home route";
  })
  .get("/get-users", getUsers)
  .post("/create-user", createUser);
export default router;

В этой новой конфигурации нам нужно изменить наш файл server.ts:

import { Application } from "https://deno.land/x/oak/mod.ts";
const app = new Application();
import router from "./routes.ts";
const PORT: number = 3000;
//
app.use(router.routes());
app.use(router.allowedMethods());
app.listen({ port: PORT });

Теперь нам нужно определить наши методы маршрутизации, которые мы вызвали в файле router.ts. Начнем с создания метода getUser. Помните, что мы должны добавить экземпляр нашей базы данных, который мы создали в файле db.ts:

import { User } from "./db.ts";

let getUsers = async (ctx: any) => {
  try {
    const data: any = await User.find();
    ctx.response.body = { "status": true, data: data };
    ctx.response.status = 200;
  } catch (err) {
    ctx.response.body = { status: false, data: null };
    ctx.response.status = 500;
    console.log(err);
  }
};

Теперь мы можем вызвать конечную точку get-user, которая по умолчанию вернет пустой массив со статусом 200.

Мы воспользуемся той же техникой для реализации метода createUser:

let createUser = async (ctx: any) => {
  try {
    let body: any = await ctx.request.body();
    console.log(await body.value);
    const { name, phone, email } = await body.value;
    const id = await User.insertOne({
      name: name,
      phone: phone,
      email: email,
    });
    ctx.response.body = { status: true, data: id };
    ctx.response.status = 201;
  } catch (err) {
    ctx.response.body = { status: false, data: null };
    ctx.response.status = 500;
    console.log(err);
  }
};

Всегда не забывайте ждать body.value, так как это асинхронный запрос. Без этого он просто вернет идентификатор объекта.

Запустим приложение:

deno run --allow-all --unstable server.ts

Флаг --allow-all разрешит все разрешения и отключит безопасность Deno в нашем приложении.

Тестирование наших конечных точек

Давайте продолжим и протестируем наши конечные точки с помощью POSTMAN. Вот тест на получение пользователей:

А вот и тест на создание пользователя:

Вывод

Настройка приложения в Deno - довольно проста и безопасна. Вы можете использовать любую базу данных по вашему выбору, пока для нее есть контроллер Denon. Из-за того, что у Deno нет файла package.json, он кэширует все модули на нашей локальной машине, что намного быстрее.

Источник:

#MongoDB #NodeJS
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Оплатив хостинг 25$ в подарок вы получите 100$ на счет

Получить