Рубрики
Без рубрики

Введение в MongoDB и Node.js с использованием монаха

Обычно программисты, входящие в воскресение Node.js, впервые ассоциируйте его с MongoDB и как … Помечено JavaScript, узел, MongoDB.

Обычно программисты, входящие в Unode.js Universe, впервые ассоциируйте его с помощью Монгодб И, как я публикую эту статью, я чувствую, что укрепляю эту тему еще больше.

Тем не менее, я не здесь, чтобы говорить о том, лучше ли базы данных NoSQL лучше, чем базы данных SQL или нет. Я думаю, что у каждого есть свои собственные случаи использования, и нам всегда нужно принять во внимание контекст.

Существует несколько вариантов подключения нашего API к базе данных MongoDB. Тем не менее, я могу безопасно сказать, что мангуст является самым популярным пакетом, и тот, который в большинстве случаев следует использовать. Однако в этой статье я расскажу о Монах Хотя они имеют разные подходы, они решают точно такую же проблему.

Оба разрабатываются одной и той же организацией, но сначала мы должны сначала понять, что такое NoSQL.

Что такое базы данных NoSQL?

Базы данных NoSQL не являются табличными и хранения данных по-разному от реляционных таблиц. В случае MongoDB база данных вместо таблиц имеет коллекции, а вместо того, чтобы иметь столбцы, у него есть JSON документы.

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

Именно по этим причинам они отлично подходят для широкого спектра случаев использования и могут использоваться в качестве базы данных общего назначения.

Как структурирован документ?

В базе данных NoSQL записи обычно хранятся как документ JSON. Для каждой статьи название, описание, содержимое, имя автора и идентификатор автора хранятся в качестве атрибутов в одном документе. Таким образом, данные оптимизированы для более быстрой и интуитивно понятного развития.

Почему вы должны использовать базу данных NoSQL?

Базы данных NoSQL предназначены для различных стандартов доступа к данным, которые хотят время отклика в течение низкого задержки. Если вы хотите прозойти приложение как можно скорее или если вы не хотите иметь дело с отношениями между данными в структурированном виде, MongoDB может быть идеальным решением для вас. Я также бы добавил, что в отличие от баз данных SQL, как вы можете видеть, мы можем бесплатно смоделировать данные таким образом, который подходит нам наилучшим образом.

И базы данных MongoDB гибкие до точки поддержки изменений, не требуя радикального реинжиниринга модели данных и имеет архитектуру, которая легко масштабироваться.

Почему монах?

Я понимаю, что у Mongodb есть драйвер для Node.js. И многие люди против абстракций, поскольку водитель MongoDB уже более чем достаточно, чтобы выполнить любую работу. Однако я думаю, что монах легче разработать API. Гораздо проще настроить клиента и прочитать документацию. И эти очки важны для новых для разработки API в Node.js, или если вы просто хотите получить ваше приложение в Интернете как можно скорее.

Давайте код

Теперь, когда у нас есть некоторые представления о том, что являются базами данных NoSQL, MongoDB и документы. Мы собираемся создать простой Crud.

Сначала мы установим следующие зависимости для разработки API:

npm i express @hapi/boom monk

Затем мы создадим простой API, просто чтобы убедиться, что все работает правильно:

const express = require("express");

const app = express();

app.use(express.json());

app.get("/", (req, res) => {
  return res.json({ message: "Hello World 👋🇵🇹" });
});

const start = (port) => {
  try {
    app.listen(port, () => {
      console.log(`Api running at: http://localhost:${port}`);
    });
  } catch (error) {
    console.error(error);
    process.exit();
  }
};
start(3333);

Далее мы импортируем монах, и мы определим URL-адрес подключения с нашим экземпляром MongoDB. URL структурирован следующим образом:

mongodb://[user]:[password]@[host]:[port]/[database]?authSource=admin

Таким образом, код должен быть следующим:

const express = require("express");
const monk = require("monk");

const app = express();
const db = monk("mongodb://root:root@localhost:27017/monk?authSource=admin");

// Hidden for simplicity

Теперь мы должны дать имя коллекции, которая будет сохранять все наши документы. В этом примере мы назовем коллекцию «посты». Так:

const express = require("express");
const monk = require("monk");

const app = express();
const db = monk("mongodb://root:root@localhost:27017/monk?authSource=admin");
const Posts = db.get("posts");

// Hidden for simplicity

Теперь мы собираемся работать над нашими маршрутами и нашими глаголами HTTP. В этом случае у нас еще нет никаких документов в коллекции наших постов. Итак, давайте начнем с создания нашей первой конечной точки с помощью метода вставки. Чтобы узнать больше о методе, читать Это Отказ

app.post("/posts", async (req, res) => {
  try {
    const data = await Posts.insert({ ...req.body });
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

Так же, как код указывает, что документ будет вставлен в нашу коллекцию в соответствии с тем, что происходит от тела.

@ Hapi/boom Был установлен так, чтобы всякий раз, когда происходит ошибка при консультации по ресурсу (который в этом случае является нашей базой данных), оно форматирует ошибку, так что легче читать и идентифицировать.

Теперь мы создадим конечную точку для поиска нашей коллекции для всех ваших документов. Чтобы узнать больше о методе поиска, читать Это Отказ

app.get("/posts", async (req, res) => {
  try {
    const data = await Posts.find();
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

Если мы хотим получить документ специально из нашей коллекции, вместо того, чтобы использовать SICE, мы используем Findone и укажите атрибут, с помощью которого мы хотим сделать поиск. В этом случае мы собираемся искать идентификатор документа. Чтобы узнать больше о методе Findone, прочитайте Это Отказ

app.get("/posts/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const data = await Posts.findOne({ _id: id });
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

Если мы хотим обновить атрибут определенного документа, идеал должен использовать метод FindoneAndupdate, таким образом, мы проверяем, существует ли документ, а затем обновляет его. А затем возвращает его. Чтобы узнать больше об этом методе, прочитайте Это Отказ

app.patch("/posts/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const data = await Posts.findOneAndUpdate({ _id: id }, { $set: req.body });
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

Последнее, но не менее важное, нам просто нужно удалить определенный документ, для этого мы будем использовать метод FindoneAnddelete. Как и предыдущий метод, он также проверяет сначала, если документ существует, а затем удаляет его. Как только это действие закончено, объект удаленного документа возвращается. Узнайте больше об этом методе здесь Отказ

app.delete("/posts/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const data = await Posts.findOneAndDelete({ _id: id });
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

Конечный результат должен выглядеть следующее:

const express = require("express");
const monk = require("monk");
const { boomify } = require("@hapi/boom");

const app = express();
const db = monk("mongodb://root:root@localhost:27017/monk?authSource=admin");
const Posts = db.get("posts");

app.use(express.json());

app.get("/", (req, res) => {
  return res.json({ message: "Hello World 👋🇵🇹" });
});

app.post("/posts", async (req, res) => {
  try {
    const data = await Posts.insert({ ...req.body });
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

app.get("/posts", async (req, res) => {
  try {
    const data = await Posts.find();
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

app.get("/posts/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const data = await Posts.findOne({ _id: id });
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

app.patch("/posts/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const data = await Posts.findOneAndUpdate({ _id: id }, { $set: req.body });
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

app.delete("/posts/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const data = await Posts.findOneAndDelete({ _id: id });
    return res.json(data);
  } catch (error) {
    throw boomify(error);
  }
});

const start = (port) => {
  try {
    app.listen(port, () => {
      console.log(`Api running at: http://localhost:${port}`);
    });
  } catch (error) {
    console.error(error);
    process.exit();
  }
};
start(3333);

Последние ноты

Идея этой статьи состояла в том, чтобы ввести монах и показать, что мы можем подключиться к базе данных MongoDB быстрым и простым способом. Я надеюсь, что я был понятен в объяснении вещей, и что вы нашли статью интересной.

А вы?

Вы уже используете Mongodb в ваших проектах?

Оригинал: “https://dev.to/franciscomendes10866/an-introduction-to-mongodb-and-node-js-using-monk-3492”