Быстрый резюме
В моей предыдущей статье я объяснил, как реализовать механизм шаблона, чтобы получить динамические переменные в ваш HTML -файл.
Мы использовали статические данные, чтобы показать и сохранять пользователей в памяти. В этой статье мы теперь подключим наше приложение с MongoDB для лучших функций и устойчивости.
Что такое nosql
Большие данные изменили то, как мы привыкли думать о базах данных и хранилище, у нас были реляционные базы данных, такие как MySQL, SQLServer и т. Д. Но теперь у нас есть еще одна техника для хранения данных под названием NoSQL.
Он хранит данные в документах в виде JSON, а не в таблицах с рядами и столбцами, и очень хорошо работает с JavaScript (node.js). Так выглядят данные в базе данных MongoDB.
[
{
"_id": "610ec10c78f7665bfa2cbf11",
"age": 28,
"name": "Bobbi Cannon",
"email": "bobbicannon@dragbot.com"
}
]
Когда мы не уверены в структуре данных или о том, какие данные ожидаются, мы можем слепо выбрать подход NOSQL, и ведущий вариант в отрасли-пойти с MongoDB.
Интеграция MongoDB
Мы будем использовать Монголабс Для нашей настройки базы данных MongoDB, которая поставляется с опцией бесплатного уровня.
Вы можете перейти к https://account.mongodb.com/account/login и претендуйте на свою бесплатную учетную запись. Вы можете выполнить заданные шаги для создания новой базы данных.
Создайте новый проект:
Сохранить проект с участниками (по умолчанию пользователь зарегистрирован)
Создайте свою первую базу данных
Выберите бесплатный план
Как только вы создадите свой кластер, потребуется некоторое время для первоначального развертывания.
Теперь вам нужно создать пользователя для вашей базы данных:
Интеграция MongoDB
После того, как у вас создана база данных и имя пользователя/пароль, нам необходимо установить пакет Mongoose NPM на нашем локале. $ npm установить монгуз
Чтобы сохранить данные MongoDB, вам нужно иметь файл с именем .env , что позволяет отправлять эти значения в Process.env или node.js Environment переменные.
MONGO_HOST=my_hostname MONGO_PASS=my_password MONGO_USER=my_username MONGO_DB=my_db_name
Вы получите выше информацию в опции подключения MongoDB, например mongodb+srv://my_username: my_password@my_hostname/my_db_name? Retrywrites = true & w = большинство
После создания .env Файл, вам нужно установить пару пакетов, пожалуйста, обратитесь к Package.json Файл ниже:
{
"name": "node",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "nodemon app.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"dotenv": "^10.0.0",
"ejs": "^3.1.6",
"express": "^4.17.1",
"mongoose": "^5.13.5",
"nodemon": "^2.0.12"
}
}
Теперь мы готовы изменить наш app.js Файл с изменениями MongoDB.
Во -первых, вам нужно потребовать dotenv Пакет, чтобы получить учетные данные MongoDB от .env или Process.env Анкет
require("dotenv").config();
После требования пакета вы получите доступ ко всем переменным среды, подобные этим: const {mongo_user, mongo_host, mongo_pass, mongo_db.env;
Теперь мы подключаем приложение с MongoDB, требуется приведенные ниже шаги:
require("dotenv").config();
const mongoose = require("mongoose");
// connect to the database
async function connectDB() {
const { MONGO_USER, MONGO_HOST, MONGO_PASS, MONGO_DB } = process.env;
await mongoose.connect(
`mongodb+srv://${MONGO_USER}:${MONGO_PASS}@${MONGO_HOST}/${MONGO_DB}`,
{
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true,
}
);
}
connectDB();
Нам нужно требовать Монгуз Пакет, а затем затем mongoose.connect () Мы подключим наш текущий к нашему экземпляру MongoDB.
Это асинхронная операция, вы можете использовать функции перспективы или асинхрон/ждать.
Как только вы закончите с соединением, мы определим наш Схема и Модальный Анкет
Схема Требуется, чтобы MongoDB знал, какие коллекции вы собираетесь хранить в документах.
// Create Schema for users
const usersSchema = new mongoose.Schema({
age: Number,
name: String,
email: String,
});
// Create Modal for users
const UsersModal = new mongoose.model("users", usersSchema);
Как я объяснил в своем Предыдущая статья , _id будет автогенерирован MongoDB.
Пожалуйста, обратитесь к следующему обновлению app.js Файл (сброс настройки проекта останется прежним):
require("dotenv").config();
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const app = express();
// connect to the database
async function connectDB() {
const { MONGO_USER, MONGO_HOST, MONGO_PASS, MONGO_DB } = process.env;
await mongoose.connect(
`mongodb+srv://${MONGO_USER}:${MONGO_PASS}@${MONGO_HOST}/${MONGO_DB}`,
{
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true,
}
);
}
connectDB();
// Create Schema for users
const usersSchema = new mongoose.Schema({
age: Number,
name: String,
email: String,
});
// Create Modal for users
const UsersModal = new mongoose.model("users", usersSchema);
app.set("view engine", "ejs");
app.use((req, res, next) => {
res.append("Access-Control-Allow-Origin", ["*"]);
res.append("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
res.append("Access-Control-Allow-Headers", "Content-Type");
if (req.url.includes("/api")) {
res.append("Content-Type", "text/json");
}
next();
});
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use("/assets", express.static("assets"));
const getUserInfo = (id) => {
return USER_DATA.filter((obj) => obj._id === id);
};
// Get list of users, and set data
app.get("/", (req, res) => {
UsersModal.find({}, function (err, docs) {
if (err) {
res.status(500).send(err);
}
res.render("index", {
data: docs,
});
});
});
// Get single user by id, and set data
app.get("/user/:id", (req, res) => {
UsersModal.findOne({ _id: req.params.id }, function (err, doc) {
if (err) {
res.status(500).send(err);
}
res.render("user", {
data: doc,
});
});
});
// Loading view of contact page
app.get("/contact", (req, res) => {
res.sendFile(`${__dirname}/contact.html`);
});
// RESTFul API Services
// get all users
app.get("/api/users", (req, res) => {
UsersModal.find({}, function (err, docs) {
if (err) {
res.status(500).send(err);
}
res.send(docs);
});
});
// get single user by id
app.get("/api/user/:id", (req, res) => {
UsersModal.findOne({ _id: req.params.id }, function (err, doc) {
if (err) {
res.status(500).send(err);
}
res.send(doc);
});
});
// delete single user by id
app.delete("/api/user/:id", (req, res) => {
UsersModal.findOneAndDelete({ _id: req.params.id }, function (err, doc) {
if (err) {
res.status(500).send(err);
}
res.send(doc);
});
});
// update single user by id
app.put("/api/user/:id", (req, res) => {
const { name, age, email } = req.body;
if (req.params.id) {
UsersModal.updateOne(
{ _id: req.params.id },
{ name, age, email },
function (err, doc) {
if (err) {
res.status(500).send(err);
}
res.send(doc);
}
);
} else {
res.status(500).send("id is missing in params");
}
});
// add new user
app.post("/api/user", (req, res) => {
const { name, age, email } = req.body;
if (name && age && email) {
UsersModal.create(
{
age,
name,
email,
},
function (err, doc) {
if (err) {
res.status(500).send(err);
}
res.send(doc);
}
);
} else {
res.status(500).send("error, user not added.");
}
});
app.listen(3000);
Полезные ссылки
Оригинал: “https://dev.to/gsin11/day-5-your-first-week-in-nodejs-54bm”