Учебное пособие по Node.js MongoDB — Как создать CRUD-приложение
Node.js — самая популярная среда JavaScript, когда речь идет о высокоскоростной разработке приложений. Node.js Профессионалы часто выбирают базу данных NoSQL, которая может не отставать от скорости Node.js, сохраняя при этом производительность приложения. MongoDB идеально подходит для таких требований, поскольку у нее очень быстрый цикл разработки и она работает достаточно эффективно. Итак, я представляю вам это руководство по Node.js MongoDB, в котором я покажу, как легко вы можете разработать приложение с помощью Node.js с MongoDB с нуля.
Ниже приведены темы, которые я буду освещать в этом руководстве по Node.js MongoDB:
- Что такое база данных NoSQL?
- Введение в MongoDB
- Демонстрация Node.js MongoDB
Итак, приступим.
Что такое база данных NoSQL?
Нот отолько SQL база данных или более известная как база данных NoSQL — это подход к проектированию базы данных, который обеспечивает механизм для хранения и доступа к широкому спектру неструктурированных данных. Эти неструктурированные данные могут содержать смесь моделей данных, включая форматы ключ-значение, документы, столбцы и графики и т. д. База данных NoSQL особенно полезна для обработки огромных наборов распределенных данных. Эти базы данных имеют динамическую схему и не имеют определенного языка запросов, а также не имеют или имеют очень мало отношений. Но он хранит данные в виде коллекций и документов, которые позволяют быстро обновлять.
Существует список баз данных NoSQL, которые довольно активно используются в отрасли, некоторые из которых я перечислил ниже:
- MongoDB
- Hbase
- Кассандра
- Amazon SimpleDB
- Гипертаблица
Чтобы узнать больше о NoSQL и о том, что он отличается от баз данных SQL, вы можете прочитать эту статью на Различия между базами данных SQL и NoSQL.
В этом руководстве по Node.js MongoDB я сосредоточусь только на одной из этих баз данных, о которой вы, возможно, уже догадались, это MongoDB. Но прежде чем я покажу вам, как с ним работать, давайте познакомимся с его тонкостями.
Введение в MongoDB
MongoDB — это нереляционная база данных с открытым исходным кодом, которая хранит данные в виде коллекций и документов. Базы данных такого типа сохраняют большинство функций, предлагая горизонтальную масштабируемость. Это упрощает работу разработчика, обеспечивая постоянство данных и повышая гибкость.
MongoDB хранит документы JSON в виде коллекций с динамическими схемами. Он хранит всю связанную информацию вместе, что повышает скорость обработки запросов. Таким образом, это также помогает сократить разрыв между хранилищами ключей и значений и реляционными базами данных.
Ниже я перечислил несколько наиболее интригующих особенностей MongoDB:
- Индексация: Он использует индексы, которые помогают повысить производительность поиска.
- Репликация: MongoDB распределяет данные по разным машинам.
- Специальные запросы: Он поддерживает специальные запросы, индексируя документы BSON и используя уникальный язык запросов.
- Без схемы: Это повышает гибкость данных и не требует сценария для изменения или обновления данных.
- Разделение: Он использует сегментирование, которое упрощает развертывание очень больших наборов данных и обеспечивает операции с высокой пропускной способностью.
Теперь, когда вы знакомы с MongoDB, давайте перейдем к этому руководству Node.js MongoDB и посмотрим, насколько просто установить MongoDB в системе.
Установка MongoDB
Шаг I: Загрузите последнюю версию сервера MongoDB с официального сайта:
Шаг II: Затем нажмите на вкладку «Сервер», как показано на скриншоте ниже.
Шаг III: Если вы ищете какую-либо конкретную версию, вы можете выбрать ее из раскрывающегося списка или просто загрузить последнюю версию.
Шаг IV: Выберите свою ОС из выпадающего списка. Поскольку я работаю в Windows, я выберу Windows 64 бит.
Шаг V: Теперь выберите пакет как MSI.
Шаг VI: Наконец, нажмите «Загрузить», чтобы начать процесс загрузки.
Шаг VII: После загрузки дважды щелкните файл MSI, чтобы открыть его, и продолжите работу с мастером установки.
Шаг VIII: Теперь, чтобы запустить сервер MongoDB, вам нужно запустить файл .exe и назначить папку базы данных. Чтобы упростить работу, все, что вам нужно сделать, это записать несколько строк кода в файл блокнота и сохранить его с расширением .bat. Другими словами, вам просто нужно создать пакетный файл, который без проблем запустит сервер MongoDB. Чтобы создать пакетный файл, введите следующий код:
cd C:\Program Files\MongoDB\Server\4.0\bin (MongoDB path)
mongod.exe --dbpath F:\MongoDB\data (database dump destination)
Теперь, когда вы хотите запустить сервер MongoDB, все, что вам нужно сделать, это дважды щелкнуть этот пакетный файл и открыть приложение MongoDB Compass.
Шаг IX: Далее вам нужно запустить «MongoDB Compass» и согласиться с его условиями использования.
Шаг X: Теперь вам нужно указать конфигурации сервера и нажать «Подключиться».
Шаг XI: Далее нажмите «Создать базу данных».
Шаг XII: Теперь укажите соответствующее имя для вашей базы данных и коллекции и нажмите «Создать базу данных».
Думаю, теперь вы готовы приступить к практической части, так что без дальнейших задержек давайте погрузимся в код.
Демонстрация Node.js MongoDB
Здесь я буду создавать приложение CRUD для управления курсами с помощью Node.js и Express.js и использовать MongoDB для хранения данных. В этом приложении в качестве входных данных я буду использовать такие сведения о курсе, как название, идентификатор, продолжительность и стоимость. Для этого я создам несколько файлов представления, которые будут действовать как интерфейс. Затем, чтобы обрабатывать данные, мне также понадобится контроллер, который поможет манипулировать данными. Наконец, мне понадобятся несколько файлов моделей для хранения данных. Итак, в основном, я буду следовать шаблону MVC для разработки этого приложения. Итак, давайте теперь перейдем к разработке.
Наше приложение будет иметь следующую иерархию:
- NodejsMongoDbДемо
- пакет.json
- script.js
- контроллеры
- изображение
- модели
- курс.модель.js
- mongodb.js
- Просмотры
- курс
- курсAddEdit.hbs
- список.hbs
- макеты
- курс
Итак, начнем разработку приложения с создания каталога для проекта. Когда вы закончите, откройте командную строку и перейдите в каталог вашего проекта. Теперь вам нужно настроить конфигурации проекта для этого, введите приведенную ниже команду и предоставьте необходимые данные:
npm init
Теперь вам нужно установить необходимые пакеты. Итак, в этом проекте я использую следующие пакеты:
- экспресс.js: Это веб-фреймворк.
- экспресс-рули: Это механизм шаблонов, который помогает создавать клиентские приложения.
- мангуста: Помогает в общении с MongoDB.
- парсер тела: Помогает преобразовать данные POST в тело запроса.
- нодмон: Помогает в автоматическом перезапуске сервера при изменении кода.
Чтобы установить эти пакеты, введите следующую команду:
npm i --s express express-handlebars mongoose body-parser
Поскольку я хочу установить nodemon так, чтобы он мог получить доступ к любому файлу в каталоге, я буду устанавливать его с помощью глобальной команды:
npm i -g nodemon
После того, как вы закончите установку с пакетами, ваш окончательный файл JSON должен выглядеть так, как показано ниже:
пакет.json
{
"name": "samplenodemongo",
"version": "1.0.0",
"description": "Edureka demo on how to build a Node.js application with MongoDB",
"main": "script.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Edureka",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"express": "^4.16.4",
"express-handlebars": "^3.0.2",
"mongoose": "^5.5.6",
"nodemon": "^1.19.0"
}
}
Как видите, в разделе зависимостей успешно перечислены все установленные пакеты. Итак, давайте теперь создадим базу данных, которую мы будем использовать в этой демонстрации. Для этого запустите пакетный файл и откройте приложение MongoDB. Теперь создайте новую базу данных и укажите имя коллекции. В моем приложении я буду использовать «EdurekaCoursesDB» в качестве имени базы данных и «курсы» в качестве коллекции.
Теперь вернитесь в редактор кода, где мы будем создавать файлы для установления связи между Node.js и MongoDB. Для этого сначала вам нужно создать папку внутри каталога проекта и назвать ее «модель». Внутри этой папки создайте файл javascript с именем ‘ mongodb.js ‘ и введите приведенный ниже код:
mongodb.js
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/EdurekaCoursesDB', {useNewUrlParser: true}, (err) => {
if (!err) {
console.log('Successfully Established Connection with MongoDB')
}
else {
console.log('Failed to Establish Connection with MongoDB with Error: '+ err)
}
});
//Connecting Node and MongoDB
require('./course.model');
Теперь вам нужно определить схему базы данных вашего курса. Для этого создайте новый файл JS в папке модели и назовите его ‘ курс.модель.js ‘. Итак, я использую четыре поля в своем объекте курса. Я использую четыре поля: имя, идентификатор, продолжительность и плата. Чтобы создать этот файл, введите приведенный ниже код.
курс.модель.js
const mongoose = require('mongoose');
//Attributes of the Course object
var courseSchema = new mongoose.Schema({
courseName: {
type: String,
required: 'This field is required!'
},
courseId: {
type: String
},
courseDuration: {
type: String
},
courseFee: {
type: String
}
});
mongoose.model('Course', courseSchema);
Теперь вам нужно создать корневой файл с именем ‘ script.js ‘. Этот файл является точкой входа этого приложения и будет содержать в себе все пути подключения. Вы должны быть очень осторожны при указании путей в этом файле, так как это может привести к ошибке или сбою приложения. Наряду с этим он также отвечает за вызов сервера и установку соединения. Чтобы создать этот файл, введите следующий код:
script.js
require('./models/mongodb');
//Import the necessary packages
const express = require('express');
var app = express();
const path = require('path');
const exphb = require('express-handlebars');
const bodyparser = require('body-parser');
const courseController = require('./controllers/courseController');
app.use(bodyparser.urlencoded({
extended: true
}));
//Create a welcome message and direct them to the main page
app.get('/', (req, res) => {
res.send('
<h2 style="font-family: Malgun Gothic; color: midnightblue ">Welcome to Edureka Node.js MongoDB Tutorial!!</h2>
Click Here to go to <b> <a href="/course">Course Page</a> </b>');
});
app.use(bodyparser.json());
//Configuring Express middleware for the handlebars
app.set('views', path.join(__dirname, '/views/'));
app.engine('hbs', exphb({ extname: 'hbs', defaultLayout: 'mainLayout', layoutDir: __dirname + 'views/layouts/' }));
app.set('view engine', 'hbs');
//Establish the server connection
//PORT ENVIRONMENT VARIABLE
const port = process.env.PORT || 8080;
app.listen(port, () => console.log(`Listening on port ${port}..`));
//Set the Controller path which will be responding the user actions
app.use('/course', courseController);
Затем, чтобы обрабатывать запросы пользователей, вам необходимо создать файл маршрутизатора. Для этого сначала создайте папку и назовите ее «контроллер», а в этой папке создайте файл с именем « курсКонтроллер.js ‘. В этом файле мы будем иметь дело с операциями CRUD, связанными с сотрудником. Ниже приведен код для создания этого файла:
курсКонтроллер.js
//Import the dependencies
const express = require('express');
const mongoose = require('mongoose');
//Creating a Router
var router = express.Router();
//Link
const Course = mongoose.model('Course');
//Router Controller for READ request
router.get('/',(req, res) => {
res.render("course/courseAddEdit", {
viewTitle: "Insert a New Course for Edureka"
});
});
//Router Controller for UPDATE request
router.post('/', (req,res) => {
if (req.body._id == '')
insertIntoMongoDB(req, res);
else
updateIntoMongoDB(req, res);
});
//Creating function to insert data into MongoDB
function insertIntoMongoDB(req,res) {
var course = new Course();
course.courseName = req.body.courseName;
course.courseId = req.body.courseId;
course.courseDuration = req.body.courseDuration;
course.courseFee = req.body.courseFee;
course.save((err, doc) => {
if (!err)
res.redirect('course/list');
else
console.log('Error during record insertion : ' + err);
});
}
//Creating a function to update data in MongoDB
function updateIntoMongoDB(req, res) {
Course.findOneAndUpdate({ _id: req.body._id }, req.body, { new: true }, (err, doc) => {
if (!err) { res.redirect('course/list'); }
else {
if (err.name == 'ValidationError') {
handleValidationError(err, req.body);
res.render("course/courseAddEdit", {
//Retaining value to be displayed in the child view
viewTitle: 'Update Course Details',
employee: req.body
});
}
else
console.log('Error during updating the record: ' + err);
}
});
}
//Router to retrieve the complete list of available courses
router.get('/list', (req,res) => {
Course.find((err, docs) => {
if(!err){
res.render("course/list", {
list: docs
});
}
else {
console.log('Failed to retrieve the Course List: '+ err);
}
});
});
//Creating a function to implement input validations
function handleValidationError(err, body) {
for (field in err.errors) {
switch (err.errors[field].path) {
case 'courseName':
body['courseNameError'] = err.errors[field].message;
break;
default:
break;
}
}
}
//Router to update a course using it's ID
router.get('/:id', (req, res) => {
Course.findById(req.params.id, (err, doc) => {
if (!err) {
res.render("course/courseAddEdit", {
viewTitle: "Update Course Details",
course: doc
});
}
});
});
//Router Controller for DELETE request
router.get('/delete/:id', (req, res) => {
Course.findByIdAndRemove(req.params.id, (err, doc) => {
if (!err) {
res.redirect('/course/list');
}
else { console.log('Failed to Delete Course Details: ' + err); }
});
});
module.exports = router;
Теперь, когда мы закончили работу с серверными файлами, следующим шагом будет создание представлений. Для этого сначала вам нужно создать оболочку для дочерних представлений. Но перед этим создайте папку с именем ‘ Просмотры ‘. Внутри этой папки создайте еще две папки с именами ‘ курс ‘ а также ‘ макеты ‘ соответственно с расширением .hbs. Теперь перейдите в папку «layouts» и создайте оболочку с именем « mainLayout.hbs ‘. Этот файл будет содержать базовый скелет приложения, который также будет отражаться в дочерних представлениях. В этот файл я также вставляю изображение, поэтому для этого я создам локальную папку с именем изображение и сохранить мое изображение внутри.
Чтобы создать этот файл, введите следующие коды:
mainLayout.hbs
<!DOCTYPE html>
<html>
<head>
<title>Edureka Node.js MongoDB Demo</title>
<link rel="stylesheet" href=" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fjquery%2F3.2.1%2Fjquery.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fmaxcdn.bootstrapcdn.com%2Fbootstrap%2F3.3.7%2Fjs%2Fbootstrap.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
</head>
<body class = "bg-info">
<div align="center">
<!-- Inserting the image -->
<img src="/static/edurekaLogo.png" alt="Edureka Logo">
</div>
<div class="row">
<div class="col-md-6 offset-md-3" style="background-color: #fff; margin-top: 40px; padding:20px;">
<!-- retrieving HTML String from the child Views -->
{{{body}}}
</div>
</div>
</body>
</html>
Наконец, внутри папки курса мы создадим два дочерних представления, одно из которых будет использоваться для добавления или обновления курса, а второе представление будет отображать полный список доступных курсов. Давайте сначала сосредоточимся на первом представлении, т.е. курсAddEdit.hbs который будет выглядеть как на скриншоте ниже.
Итак, позвольте мне теперь показать, как построить это представление.
Как видно на скриншоте, страница будет содержать четыре поля ввода и две кнопки. Одна кнопка будет отправлять данные, заполненные пользователем, в базу данных, а вторая кнопка будет отображать полный список курсов, доступных в базе данных. Чтобы убедиться, что входные данные верны, вам также необходимо добавить некоторые проверки. После этого вы сможете увидеть это представление, используя URL-адрес «/course». Ниже приведен код, вам нужно будет создать курсAddEdit.hbs файл:
курсAddEdit.hbs
<!-- Obtaining value from the course controller -->
<h3>{{viewTitle}}</h3>
<form action="/course" method="POST">
<input type="hidden" name="_id" value="{{course._id}}">
<div class = "form-group">
<label>Course Name</label>
<input type="text" maxlength="100" class="form-control" name="courseName" placeholder="Course Name" value="{{course.courseName}}">
<div class="text-danger">
{{course.courseNameError}}</div>
</div>
<div class = "form-group">
<label>Course ID</label>
<input type="number" min='10000' max='99999' class="form-control" name="courseId" placeholder="Course Id" value="{{course.courseId}} " required>
</div>
<div class = "form-row">
<div class = "form-group col-md-6">
<label>Course Duration</label>
<input type="number" min='10' max='99' class="form-control" name="courseDuration" placeholder="Course Duration (Hrs)" "{{course.courseDuration}} " required>
</div>
<div class = "form-group col-md-6">
<label>Course Fee</label>
<input type="number" min='100' max="100000" class="form-control" name="courseFee" placeholder="Course Fee (USD)" "{{course.courseFee}} " required>
</div>
</div>
<div class="form-group">
<button type="submit" class="btn btn-info"><i class="fa fa-database"></i> Submit</button>
<a class="btn btn-secondary" href="/course/list"><i class="fa fa-list-alt"></i> View All Courses</a>
</div>
</form>
Теперь позвольте мне показать вам следующий вид, т.е. список.hbs который извлечет из базы данных полный список доступных курсов и отобразит их на вашем экране:
В этом представлении я использую таблицу для отображения списка курсов. Эта таблица будет иметь пять столбцов, где первые четыре будут отображать сведения о курсе, а последний столбец позволит вам редактировать/удалять запись непосредственно из интерфейса приложения. Контроллеры этих функций уже созданы в script.js файл. Итак, осталось только добавить вид и для этого создать список.hbs файл и введите ниже написанный код.
список.hbs
<div>
<a class="btn btn-secondary" href="/course"><i class="fa fa-plus"></i> Create New</a>
<h3 align="center">Edureka's Course List</h3>
</div>
<table class="table table-striped">
<thead>
<tr>
<th>Course Name</th>
<th>Course Id</th>
<th>Course Duration(Hrs)</th>
<th>Course Fee(USD)</th>
<th></th>
</tr>
</thead>
<tbody>
{{#each list}}
<tr align="center">
<td>{{this.courseName}}</td>
<td>{{this.courseId}}</td>
<td>{{this.courseDuration}}</td>
<td>{{this.courseFee}}</td>
<td>
<a href="/course/{{this._id}}"> Edit </a>
<a href="/course/delete/{{this._id}}" onclick="return confirm('Are you sure to delete this record ?');"> Delete </a>
</td>
</tr>
{{/each}}
</tbody>
</table>
На этом завершается часть кодирования, теперь пришло время протестировать наше приложение. Для этого откройте командную строку и перейдите в папку проекта или, если вы используете IDE, откройте терминал и введите приведенную ниже команду, чтобы запустить сервер.
nodemon script.js
Теперь вы можете запустить свое приложение в любом браузере по адресу http://локальный:8080.
После того, как вы добавили свои собственные данные, вы можете вернуться в MongoDB и проверить, добавлены ли туда данные или нет. Если вы обратитесь к приведенному ниже снимку экрана, вы увидите, что все мои данные были успешно добавлены. Это означает, что моя MongoDB подключена и отлично работает с моим Node.js API.
На этом мы подошли к концу этого учебника Node.js MongoDB. Надеюсь, мне удалось четко изложить концепции и помочь вам понять, как именно MongoDB работает с Node.js.
Есть к нам вопрос? Пожалуйста, укажите это в разделе комментариев этого руководства по Node.js MongoDB, и мы свяжемся с вами.