MEAN.JS - Краткое руководство

Что такое MEAN.js?

Срок MEAN.js- это полное решение с открытым исходным кодом на JavaScript, используемое для создания динамических веб-сайтов и веб-приложений. MEAN - это аббревиатура, обозначающаяMongoDB, Express, Node.js и AngularJS, которые являются ключевыми компонентами стека MEAN.

Он был в основном разработан для решения общих проблем с подключением этих фреймворков (Mongo, Express Nodejs, AngularJS), создания надежного фреймворка для поддержки повседневных потребностей разработки и помощи разработчикам в использовании передовых методов при работе с популярными компонентами JavaScript.

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

  • MongoDB - Система баз данных

  • Express - Внутренняя веб-платформа

  • Node.js - Платформа веб-сервера

  • AngularJS - Интерфейсный фреймворк

История

Название MEAN было придумано Валерием Карповым , разработчиком MongoDB.

Зачем использовать MEAN.js?

  • Это платформа с открытым исходным кодом, которую можно использовать бесплатно.

  • Его можно использовать как отдельное решение для всего приложения.

  • Это обеспечивает более низкую стоимость разработки и увеличивает гибкость и эффективность разработчика.

  • Он поддерживает шаблон MVC и использует JSON для передачи данных.

  • Он предоставляет дополнительные фреймворки, библиотеки и повторно используемые модули для увеличения скорости разработки.

Прежде чем мы начнем с дальнейших концепций, мы увидим основные строительные блоки приложения MEAN.JS.

Введение в MongoDB

В сокращении MEAN ,Mозначает MongoDB, базу данных NoSQL с открытым исходным кодом, которая сохраняет данные в формате JSON. Он использует документно-ориентированную модель данных для хранения данных вместо использования таблиц и строк, как мы используем в реляционных базах данных. Он хранит данные в двоичном формате JSON (JavaScript Serialized Object Notation), чтобы легко передавать данные между клиентом и сервером. MongoDB работает над концепцией коллекции и документа. Для получения дополнительной информации перейдите по этой ссылке MongoDB .

Введение в Express

В сокращении MEAN ,Eрасшифровывается как Express , который представляет собой гибкую структуру веб-приложений Node.js, которая упрощает процесс разработки. Его легко настроить и настроить, что позволяет создавать безопасные, модульные и быстрые приложения. Он определяет маршруты приложения в зависимости от методов HTTP и URL-адресов. Вы можете легко подключаться к таким базам данных, как MongoDB, MySQL, Redis. Для получения дополнительной информации перейдите по этой ссылке Express .

Введение в AngularJS

В сокращении MEAN ,Aрасшифровывается как AngularJS , веб-интерфейс JavaScript. Он позволяет создавать динамические одностраничные приложения с использованием чистого контроллера представления модели (MVC). AngularJS автоматически обрабатывает код JavaScript, подходящий для каждого браузера. Для получения дополнительной информации перейдите по этой ссылке AngularJS .

Введение в Node.js

В сокращении MEAN ,Nозначает Node.js , серверную платформу, используемую для разработки веб-приложений, таких как сайты потокового видео, одностраничные приложения и другие веб-приложения. Он предоставляет богатую библиотеку различных модулей JavaScript, которая в значительной степени упрощает разработку веб-приложений с использованием Node.js. Он построен на движке JavaScript V8 Google Chrome, поэтому очень быстро выполняет код. Для получения более подробной информации, обратитесь к этой ссылке Node.js .

MEAN - это платформа JavaScript с открытым исходным кодом, используемая для создания динамических веб-сайтов и веб-приложений. Он включает следующие четыре строительных блока для создания приложения.

  • MongoDB - Это база данных документов, в которой данные хранятся в гибких документах типа JSON.

  • Express - Это фреймворк веб-приложений для Nodejs.

  • Node.js- Это платформа веб-сервера. Он предоставляет богатую библиотеку различных модулей JavaScript, которая упрощает разработку веб-приложений.

  • AngularJS- Это веб-интерфейс JavaScript. Он позволяет создавать динамические одностраничные приложения с использованием чистого контроллера представления модели (MVC).

Для получения дополнительной информации об этом вы можете обратиться к обзорной главе. На диаграмме ниже изображена архитектура приложения стека MEAN.

Как показано на изображении выше, у нас есть AngularJS в качестве клиентского языка, который обрабатывает запрос клиента.

  • Каждый раз, когда пользователь делает запрос, он сначала обрабатывается AngularJS.

  • Затем запрос переходит на второй этап, где у нас есть Node.js в качестве языка на стороне сервера и ExpressJS в качестве серверной веб-инфраструктуры.

  • Node.js обрабатывает запросы клиент / сервер, а ExpressJS делает запрос к базе данных.

  • На последнем этапе MongoDB (база данных) извлекает данные и отправляет ответ ExpressJS.

  • ExpressJS возвращает ответ Nodejs и, в свою очередь, AngularJS, а затем отображает ответ пользователю.

В этой главе рассказывается о создании и настройке приложения MEAN. Мы используем NodeJS и ExpressJS вместе для создания проекта.

Предпосылки

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

Вы можете установить последнюю версию Node.js, посетив веб-сайт Node.js по адресу Node.js (это для пользователей Windows). Когда вы загружаете Node.js, npm автоматически устанавливается в вашей системе. Пользователи Linux могут установить Node и npm по этой ссылке .

Проверьте версию Node и npm с помощью следующих команд -

$ node --version
$ npm --version

Команды будут отображать версии, как показано на изображении ниже -

Создание экспресс-проекта

Создайте каталог проекта с помощью команды mkdir, как показано ниже -

$ mkdir mean-demo //this is name of repository

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

$ cd webapp-demo
$ npm init

Команда init проведет вас через создание файла package.json -

Эта утилита проведет вас через создание файла package.json. Он охватывает только самые распространенные элементы и пытается угадать разумные значения по умолчанию.

See `npm help json` for definitive documentation on these fields and exactly what they do.
Use `npm install --save` afterwards to install a package and save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (mean-demo) mean_tutorial
version: (1.0.0)
description: this is basic tutorial example for MEAN stack
entry point: (index.js) server.js
test command: test
git repository:
keywords: MEAN,Mongo,Express,Angular,Nodejs
author: Manisha
license: (ISC)
About to write to /home/mani/work/rnd/mean-demo/package.json:

{
   "name": "mean_tutorial",
   "version": "1.0.0",
   "description": "this is basic tutorial example for MEAN stack",
   "main": "server.js",
   "scripts": {
      "test": "test"
   },
   "keywords": [
      "MEAN",
      "Mongo",
      "Express",
      "Angular",
      "Nodejs"
   ],
   "author": "Manisha",
   "license": "ISC"
}
Is this ok? (yes) yes

Нажмите Да, и будет создана структура папок, как показано ниже -

-mean-demo
   -package.json

Package.json файл будет иметь следующую информацию -

{
   "name": "mean_tutorial",
   "version": "1.0.0",
   "description": "this is basic tutorial example for MEAN stack",
   "main": "server.js",
   "scripts": {
      "test": "test"
   },
   "keywords": [
      "MEAN",
      "Mongo",
      "Express",
      "Angular",
      "Nodejs"
   ],
   "author": "Manisha",
   "license": "ISC"
}

Теперь, чтобы настроить проект Express в текущую папку и установить параметры конфигурации для фреймворка, используйте следующую команду -

npm install express --save

Перейдите в каталог своего проекта и откройте файл package.json, вы увидите следующую информацию -

{
   "name": "mean_tutorial",
   "version": "1.0.0",
   "description": "this is basic tutorial example for MEAN stack",
   "main": "server.js",
   "scripts": {
      "test": "test"
   },
   "keywords": [
      "MEAN",
      "Mongo",
      "Express",
      "Angular",
      "Nodejs"
   ],
   "author": "Manisha",
   "license": "ISC",
   "dependencies": {
      "express": "^4.17.1"
   }
}

Здесь вы можете увидеть, что в файл добавлена ​​явная зависимость. Теперь структура проекта следующая -

-mean-demo
   --node_modules created by npm install
   --package.json tells npm which packages we need
   --server.js set up our node application

Запуск приложения

Перейдите в каталог только что созданного проекта и создайте файл server.js с приведенным ниже содержимым.

// modules =================================================
const express = require('express');
const app = express();
// set our port
const port = 3000;
app.get('/', (req, res) ⇒ res.send('Welcome to Tutorialspoint!'));

// startup our app at http://localhost:3000
app.listen(port, () ⇒ console.log(`Example app listening on port ${port}!`));

Затем запустите приложение с помощью следующей команды -

$ npm start

Вы получите подтверждение, как показано на изображении ниже -

Сообщает, что приложение Express запущено. Откройте любой браузер и войдите в приложение, используяhttp://localhost:3000. Вы увидите Добро пожаловать в Tutorialspoint! текст, как показано ниже -

В этой главе демонстрируется построение маршрута для приложения с Node и Express.

В предыдущей главе мы создали приложение node-express. Перейдите в каталог проекта под названием mean-demo . Перейдите в каталог с помощью команды ниже -

$ cd mean-demo

Настройка маршрутов

Маршруты используются в качестве картографической службы с использованием URL-адреса входящего запроса. Открытьserver.js файл и настройте маршрутизацию, как показано ниже -

// modules =================================================
const express = require('express');
const app = express();

// set our port
const port = 3000;
app.get('/', (req, res) ⇒ res.send('Welcome to Tutorialspoint!'));

//defining route
app.get('/tproute', function (req, res) {
   res.send('This is routing for the application developed using Node and Express...');
});

// startup our app at http://localhost:3000
app.listen(port, () ⇒ console.log(`Example app listening on port ${port}!`));

Запуск приложения

Затем запустите приложение с помощью следующей команды -

$ npm start

Вы получите подтверждение, как показано на изображении ниже -

Теперь перейдите в браузер и введите http://localhost:3000/myroute. Вы получите страницу, как показано на изображении ниже -

В этой главе мы продемонстрируем, как использовать модель данных в нашем приложении Node-express.

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

Модель данных определяет, какие данные присутствуют в документе и какие данные должны быть в документе. Обратитесь к официальной установке MongoDB , чтобы установить MongoDB.

Мы будем использовать наш код предыдущей главы. Вы можете скачать исходный код по этой ссылке . Загрузите zip-файл; извлеките его в свою систему. Откройте терминал и выполните команду ниже, чтобы установить зависимости модуля npm.

$ cd mean-demo
$ npm install

Добавление Mongoose в приложение

Mongoose - это библиотека моделирования данных, которая определяет среду и структуру данных, делая MongoDB мощным. Вы можете установить Mongoose как модуль npm через командную строку. Перейдите в корневую папку и выполните следующую команду -

$ npm install --save mongoose

Приведенная выше команда загрузит новый пакет и установит его в папку node_modules . --Save флаг добавит этот пакет package.json файл.

{
   "name": "mean_tutorial",
   "version": "1.0.0",
   "description": "this is basic tutorial example for MEAN stack",
   "main": "server.js",
   "scripts": {
      "test": "test"
   },
   "keywords": [
      "MEAN",
      "Mongo",
      "Express",
      "Angular",
      "Nodejs"
   ],
   "author": "Manisha",
   "license": "ISC",
   "dependencies": {
      "express": "^4.17.1",
      "mongoose": "^5.5.13"
   }
}

Настройка файла подключения

Для работы с моделью данных мы будем использовать папку app / models . Давайте создадим модель student.js, как показано ниже -

var mongoose = require('mongoose');

// define our students model
// module.exports allows us to pass this to other files when it is called
module.exports = mongoose.model('Student', {
   name : {type : String, default: ''}
});

Вы можете настроить файл подключения, создав файл и используя его в приложении. Создайте файл с именем db.js в конфигурации / db.js . Содержимое файла показано ниже -

module.exports = {
   url : 'mongodb://localhost:27017/test'
}

Здесь test - это имя базы данных.

Здесь предполагается, что вы установили MongoDB локально. После установки запустите Mongo и создайте базу данных по имени test. Эта база данных будет иметь коллекцию по именам студентов. Вставьте данные в эту коллекцию. В нашем случае мы вставили запись с помощью db.students.insertOne ({name: 'Manisha', place: 'Pune', country: 'India'});

Доведите db.js файл в приложении, то есть, в server.js . Содержание файла показано ниже -

// modules =================================================
const express = require('express');
const app = express();
var mongoose = require('mongoose');
// set our port
const port = 3000;
// configuration ===========================================

// config files
var db = require('./config/db');
console.log("connecting--",db);
mongoose.connect(db.url); //Mongoose connection created

// frontend routes =========================================================
app.get('/', (req, res) ⇒ res.send('Welcome to Tutorialspoint!'));

//defining route
app.get('/tproute', function (req, res) {
   res.send('This is routing for the application developed using Node and Express...');
});

// sample api route
// grab the student model we just created
var Student = require('./app/models/student');
app.get('/api/students', function(req, res) {
   // use mongoose to get all students in the database
   Student.find(function(err, students) {
      // if there is an error retrieving, send the error.
      // nothing after res.send(err) will execute
      if (err)
         res.send(err);
      res.json(students); // return all students in JSON format
   });
});
// startup our app at http://localhost:3000
app.listen(port, () ⇒ console.log(`Example app listening on port ${port}!`));

Затем запустите приложение с помощью следующей команды -

$ npm start

Вы получите подтверждение, как показано на изображении ниже -

Теперь перейдите в браузер и введите http://localhost:3000/api/students. Вы получите страницу, как показано на изображении ниже -

В этой главе мы увидим, как наше приложение взаимодействует через REST API с нашей базой данных с помощью методов HTTP. Термин REST означает REpresentational State Transfer, который представляет собой архитектурный стиль, разработанный для взаимодействия с веб-службами, а API означает интерфейс прикладных программ, который позволяет взаимодействовать приложениям друг с другом.

Сначала мы создадим RESTful API, чтобы получить все элементы, создать элемент и удалить элемент. Для каждого элемента _ID будет сгенерирован автоматически MongoDB. В таблице ниже описано, как приложение должно запрашивать данные из API.

HTTP метод URL-путь Описание
ПОЛУЧИТЬ

/api/students

Используется для получения всех учеников из коллекции Student.
ПОСЛЕ

/api/students/send

Используется для создания студенческой записи в коллекции Student.
УДАЛЯТЬ

/api/students/student_id

Используется для удаления студенческой записи из коллекции Студент.

RESTful API-маршруты

Сначала мы обсудим метод публикации в маршрутах RESTful API.

ПОСЛЕ

Сначала создадим запись в коллекции Student через наш REST API. Код для этого конкретного случая можно найти в файле server.js . Для справки сюда вставлена ​​часть кода -

app.post('/api/students/send', function (req, res) {
   var student = new Student(); // create a new instance of the student model
   student.name = req.body.name; // set the student name (comes from the request)
   student.save(function(err) {
      if (err)
         res.send(err);
         res.json({ message: 'student created!' });
   });
});

Исполнение

Вы можете скачать исходный код этого приложения по этой ссылке . Загрузите zip-файл; извлеките его в свою систему. Откройте терминал и запустите приведенную ниже команду, чтобы установить зависимости модуля npm.

$ cd mean-demon-consuming_rest_api
$ npm install

Для синтаксического анализа запроса нам понадобится пакет парсера тела. Следовательно, запустите приведенную ниже команду, чтобы включить ее в свое приложение.

npm install --save body-parser

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

Чтобы запустить приложение, перейдите в каталог только что созданного проекта и запустите его с помощью приведенной ниже команды -

npm start

Вы получите подтверждение, как показано на изображении ниже -

Существует множество инструментов для тестирования вызовов API, здесь мы используем одно из удобных расширений для Chrome под названием Postman REST Client .

Откройте клиент REST Postman, введите URL-адрес как http://localhost:3000/api/students/send, выберите метод POST . Затем введите данные запроса, как показано ниже -

Обратите внимание, что мы отправляем данные имени как x-www-form-urlencoded . Это отправит все наши данные на сервер Node в виде строк запроса.

Нажмите кнопку « Отправить» , чтобы создать запись об ученике. Появится сообщение об успехе, как показано ниже -

ПОЛУЧИТЬ

Теперь давайте получим все студенческие записи из mongodb. Необходимо написать следующий маршрут. Вы можете найти полный код в файле server.js .

app.get('/api/students', function(req, res) {
   // use mongoose to get all students in the database
   Student.find(function(err, students) {
      // if there is an error retrieving, send the error.
      // nothing after res.send(err) will execute
      if (err)
         res.send(err);
      res.json(students); // return all students in JSON format
   });
});

Затем откройте клиент REST Postman, введите URL-адрес как

http://localhost:3000/api/students, выберите метод GET и нажмите кнопку «Отправить», чтобы получить всех учащихся.

УДАЛЯТЬ

Затем давайте посмотрим, как удалить запись из нашей коллекции mongo с помощью вызова REST api.

Необходимо написать следующий маршрут. Вы можете найти полный код в файле server.js .

app.delete('/api/students/:student_id', function (req, res) {
   Student.remove({
      _id: req.params.student_id
   }, function(err, bear) {
      if (err)
         res.send(err);
      res.json({ message: 'Successfully deleted' });
   });
});

Затем откройте клиент REST Postman, введите URL-адрес как

http://localhost:3000/api/students/5d1492fa74f1771faa61146d

(здесь 5d1492fa74f1771faa61146d - это запись, которую мы будем удалять из коллекции Student).

Выберите метод УДАЛИТЬ и нажмите кнопку « Отправить» , чтобы получить всех студентов.

Вы можете проверить MongoDB на наличие удаленных данных, выполнив GET-вызов http://localhost:3000/api/students/5d1492fa74f1771faa61146d.

В этой главе мы добавим в приложение компоненты angular. Это интерфейс JavaScript для веб-интерфейса, который позволяет создавать динамические одностраничные приложения с использованием шаблона Model View Controller (MVC). В главе об архитектуре MEAN.JS вы видели, как AngularJS обрабатывает клиентский запрос и получает результат из базы данных.

Знакомство с AngularJS

AngularJS - это платформа веб-приложений с открытым исходным кодом, которая использует HTML в качестве языка шаблонов и расширяет синтаксис HTML для четкого выражения компонентов вашего приложения. AngularJS предоставляет некоторые базовые функции, такие как привязка данных, модель, представления, контроллеры, службы и т. Д. Для получения дополнительной информации об AngularJS перейдите по этой ссылке .

Вы можете сделать страницу приложением Angular, добавив на страницу Angular. Его можно добавить, просто используя внешний файл JavaScript, который можно либо загрузить, либо на него можно напрямую ссылаться в версии CDN.

Предположим, мы загрузили файл и сослались на него локально, добавив на страницу следующее:

<script src="angular.min.js"></script>

Теперь нам нужно сообщить Angular, что эта страница является приложением Angular. Следовательно, мы можем сделать это, добавив атрибут ng-app к тегу <html> или <body>, как показано ниже -

<html ng-app>
or
<body ng-app>

Приложение ng-app можно добавить к любому элементу на странице, но его часто помещают в теги <html> или <body>, чтобы Angular мог работать где угодно на странице.

Angular приложение как модуль

Для работы с приложением Angular нам нужно определить модуль. Это место, где вы можете сгруппировать компоненты, директивы, службы и т. Д., Которые связаны с приложением. На имя модуля ссылается атрибут ng-app в HTML. Например, мы назовем имя модуля приложения Angular как myApp и можем указать его в теге <html>, как показано ниже -

<html ng-app="myApp">

Мы можем создать определение для приложения, используя инструкцию ниже во внешнем файле JavaScript -

angular.module('myApp', []); //The [] parameter specifies dependent modules in the module definition

Определение контроллера

Приложение AngularJS полагается на контроллеры для управления потоком данных в приложении. Контроллер определяется с помощью директивы ng-controller .

Например, мы прикрепим контроллер к телу с помощью директивы ng-controller вместе с именем контроллера, который вы хотите использовать. В строке ниже мы используем имя контроллера как «myController».

<body ng-controller="myController">

Вы можете присоединить контроллер (myController) к модулю Angular (myApp), как показано ниже -

angular
.module('myApp')
.controller('myController', function() {
   // controller code here
});

Лучше использовать именованную функцию вместо анонимной для удобства чтения, повторного использования и тестирования. В приведенном ниже коде мы используем новую именованную функцию «myController» для хранения кода контроллера -

var myController = function() {
   // controller code here
};
angular
.module('myApp')
.controller('myController', myController);

Для получения дополнительной информации о контроллерах перейдите по этой ссылке .

Определение объема

Область видимости - это специальный объект JavaScript, который связывает контроллер с представлениями и содержит данные модели. В контроллерах доступ к данным модели осуществляется через объект $ scope. Функция контроллера принимает параметр $ scope, который был создан Angular, и предоставляет прямой доступ к модели.

В приведенном ниже фрагменте кода указано, как обновить функцию контроллера для получения параметра $ scope и установить значение по умолчанию -

var myController = function($scope) {
   $scope.message = "Hello World...";
};

Для получения дополнительной информации о контроллерах перейдите по этой ссылке . В следующей главе мы начнем создавать одностраничное приложение с помощью Angular.

В стеке MEAN Angular известен как вторая структура JavaScript, которая позволяет создавать одностраничные приложения с использованием чистого контроллера представления модели (MVC).

AngularJS в качестве интерфейсной структуры использует следующие вещи:

  • Использует Bower для установки файлов и библиотек

  • Использует контроллеры и сервисы для структуры приложения Angular

  • Создает разные HTML-страницы

  • Использует модуль ngRoute для обработки маршрутизации и сервисов для приложения AngularJS

  • Использует Bootstrap, чтобы сделать приложение привлекательным

Настройка нашего приложения Angular

Давайте создадим простое приложение с серверной частью Node.js и интерфейсом AngularJS. Для нашего приложения Angular нам понадобится -

  • Две разные страницы (Домашняя, Студенческая)

  • Разный угловой контроллер для каждого

  • Нет обновления страницы при переключении страниц

Бауэр и вытягивание компонентов

Нам понадобятся определенные файлы для нашего приложения, такие как bootstrap и angular. Мы попросим беседку принести нам эти компоненты.

Сначала установите bower на свой компьютер, выполнив следующую команду на своем командном терминале -

npm install -g bower

Это установит bower и сделает его доступным глобально в вашей системе. Теперь поместите файлы .bowerrc и bower.json в корневую папку. В нашем случае этоmean-demo. Содержание обоих файлов показано ниже -

.bowerrc - Это скажет Бауэру, где разместить наши файлы -

{
   "directory": "public/libs"
}

bower.json - Это похоже на package.json и сообщает Bower, какие пакеты необходимы.

{
   "name": "angular",
   "version": "1.0.0",
   "dependencies": {
      "bootstrap": "latest",
      "angular": "latest",
      "angular-route": "latest"
   }
}

Затем установите компоненты Bower, используя следующую команду. Вы можете увидеть, как bower вытягивает все файлы в public / libs .

$ bower install

Наша структура каталогов будет следующей -

mean-demo
   -app
   -config
   -node_modules
   -public
      -js
         --controllers
   -MainCtrl.js
   -StudentCtrl.js
      --app.js
      --appRoutes.js
   -libs
   -views
      --home.html
   --student.html
      -index.html
   -bower.json
   -package.json
   -server.js

Угловые контроллеры

Наш контроллер (public / js / controllers / MainCtrl.js) выглядит следующим образом:

angular.module('MainCtrl', []).controller('MainController', function($scope) {
   $scope.tagline = 'Welcome to tutorials point angular app!';
});

Контроллер public / js / controllers / StudentCtrl.js выглядит следующим образом:

angular.module('StudentCtrl', []).controller('StudentController', function($scope) {
   $scope.tagline = 'Welcome to Student section!';
});

Угловые маршруты

Наш файл маршрутов (public / js / appRoutes.js) выглядит следующим образом:

angular.module('appRoutes', []).config(['$routeProvider',
   '$locationProvider', function($routeProvider, $locationProvider) {
   $routeProvider
      // home page
      .when('/', {
         templateUrl: 'views/home.html',
         controller: 'MainController'
      })
      // students page that will use the StudentController
      .when('/students', {
         templateUrl: 'views/student.html',
         controller: 'StudentController'
      });
   $locationProvider.html5Mode(true);
}]);

Теперь, когда у нас есть контроллеры и маршруты, мы объединим их все и внедрим эти модули в наш основной общедоступный / js / app.js следующим образом:

angular.module('sampleApp', ['ngRoute', 'appRoutes', 'MainCtrl', 'StudentCtrl']);

Посмотреть файл

Angular использует файл шаблона, который можно вставить в <div ng-view> </div> в файле index.html. Директива ng-view создает заполнитель, в который может быть помещено соответствующее представление (представление HTML или ng-template) в зависимости от конфигурации. Для получения дополнительной информации об угловых представлениях перейдите по этой ссылке .

Когда вы будете готовы к маршрутизации, создайте файлы шаблонов меньшего размера и вставьте их в файл index.html . Index.html файл будет иметь следующий фрагмент кода -

<!doctype html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <base href="/">
      <title>Tutorialspoint Node and Angular</title>
      
      <!-- CSS -->
      <link rel="stylesheet" href="libs/bootstrap/dist/css/bootstrap.min.css">
      <link rel="stylesheet" href="css/style.css"> <!-- custom styles -->
      
      <!-- JS -->
      <script src="libs/angular/angular.min.js"></script>
      <script src="libs/angular-route/angular-route.min.js"></script>
      
      <!-- ANGULAR CUSTOM -->
      <script src="js/controllers/MainCtrl.js"></script>
      <script src="js/controllers/StudentCtrl.js"></script>
      <script src="js/appRoutes.js"></script>
      <script src="js/app.js"></script>
   </head>
   <body ng-app="sampleApp" ng-controller="MainController">
      <div class="container">
      
         <!-- HEADER -->
         <nav class="navbar navbar-inverse">
            <div class="navbar-header">
               <a class="navbar-brand" href="/">Tutorial</a>
            </div>
            <ul class="nav navbar-nav">
               <li><a href="/students">Students</a></li>
            </ul>
         </nav>
         <!-- ANGULAR DYNAMIC CONTENT -->
         <div ng-view></div>
      </div>
   </body>
</html>

Запуск приложения

Исполнение

Вы можете скачать исходный код этого приложения по этой ссылке . Загрузите zip-файл; извлеките его в свою систему. Откройте терминал и запустите приведенную ниже команду, чтобы установить зависимости модуля npm.

$ cd mean-demo
$ npm install

Затем запустите следующую команду -

$ node start

Вы получите подтверждение, как показано на изображении ниже -

Теперь перейдите в браузер и введите http://localhost:3000. Вы получите страницу, как показано на изображении ниже -

Щелкните ссылку Студенты , вы увидите экран, как показано ниже -

Наш интерфейс Angular будет использовать файл шаблона и вставлять его в <div ng-view> </div> в нашем файле index.html . Это будет сделано без обновления страницы.

В предыдущей главе мы видели создание одностраничного приложения meanjs с использованием Angularjs. В этой главе давайте посмотрим, как приложение Angular использует API для получения данных из Mongodb.

Вы можете скачать исходный код этого приложения по этой ссылке . Загрузите zip-файл; извлеките его в свою систему.

Структура каталогов нашего исходного кода выглядит следующим образом -

mean-demo
   -app
      -models
         -student.js
   -config
      -db.js
   -public
      -js
         -controllers
            -MainCtrl.js
            -StudentCtrl.js
         -services
            -StudentService.js
         -app.js
         -appRoutes.js
      -views
         -home.html
         -student.html
      -index.html
   -.bowerrc
   -bower.json
   -package.json
   -server.js

В этом приложении мы создали представление (home.html), в котором будут перечислены все студенты из коллекции Student, что позволит нам создать новый studentзаписать и разрешить нам удалить студенческую запись. Все эти операции выполняются через вызовы REST API.

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

$ npm install

Затем установите компоненты Bower, используя следующую команду. Вы можете увидеть, как bower вытягивает все файлы в public / libs.

$ bower install

Конфигурация узла для приложения будет сохранена в файле server.js. Это основной файл приложения узла, он будет настраивать все приложение.

// modules =================================================
const express = require('express');
const app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var methodOverride = require('method-override');
// set our port
const port = 3000;
// configuration ===========================================
// configure body parser
app.use(bodyParser.json()); // parse application/json

// parse application/vnd.api+json as json
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));

// override with the X-HTTP-Method-Override header in the request.
app.use(methodOverride('X-HTTP-Method-Override')); simulate DELETE/PUT

// set the static files location /public/img will be /img for users
app.use(express.static(__dirname + '/public'));

// config files
var db = require('./config/db');
console.log("connecting--",db);
mongoose.connect(db.url); //Mongoose connection created

// grab the student model
var Student = require('./app/models/student');
function getStudents(res) {
   Student.find(function (err, students) {
      // if there is an error retrieving, send the error. nothing after res.send(err) will execute
         if (err) {
            res.send(err);
         }
         res.json(students); // return all todos in JSON format
      });
   };
app.get('/api/studentslist', function(req, res) {
   getStudents(res);
});
app.post('/api/students/send', function (req, res) {
   var student = new Student(); // create a new instance of the student model
   student.name = req.body.name; // set the student name (comes from the request)
   student.save(function(err) {
      if (err)
         res.send(err);
         getStudents(res);
   });
});
app.delete('/api/students/:student_id', function (req, res) {
   Student.remove({
      _id: req.params.student_id
      }, function(err, bear) {
         if (err)
            res.send(err);
         getStudents(res);
      });
});
// startup our app at http://localhost:3000
app.listen(port, () ⇒ console.log(`Example app listening on port ${port}!`));

Определение Frontend Route

Общественности / index.html файл будет иметь следующий фрагмент кода -

<!doctype html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <base href="/">
      <title>Tutorialspoint Node and Angular</title>
      
      <!-- CSS -->
      <link rel="stylesheet" href="libs/bootstrap/dist/css/bootstrap.min.css">
      <link rel="stylesheet" href="css/style.css"> <!-- custom styles -->
      
      <!-- JS -->
      <script src="libs/angular/angular.min.js"></script>
      <script src="libs/angular-route/angular-route.min.js"></script>
      
      <!-- ANGULAR CUSTOM -->
      <script src="js/controllers/MainCtrl.js"></script>
      <script src="js/controllers/StudentCtrl.js"></script>
      <script src="js/services/StudentService.js"></script>
      <script src="js/appRoutes.js"></script>
      <script src="js/app.js"></script>
   </head>
   <body ng-app="sampleApp" ng-controller="MainController">
      <div class="container">
         <!-- HEADER -->
         <nav class="navbar navbar-inverse">
            <div class="navbar-header">
               <a class="navbar-brand" href="/">Tutorial</a>
            </div>
            <ul class="nav navbar-nav">
               <li><a href="/students">Students</a></li>
            </ul>
         </nav>
         
         <!-- ANGULAR DYNAMIC CONTENT -->
         <div ng-view></div>
      </div>
   </body>
</html>

Мы написали сервис для выполнения вызовов API и выполнения запросов API. Наш сервис, StudentService, выглядит следующим образом -

angular.module('StudentService', [])
// super simple service
// each function returns a promise object
.factory('Student', ['$http',function($http) {
   return {
      get : function() {
         return $http.get('/api/students');
      },
      create : function(student) {
         return $http.post('/api/students/send', student);
      },
      delete : function(id) {
         return $http.delete('/api/students/' + id);
      }
   }
}]);

Код нашего контроллера (MainCtrl.js) выглядит следующим образом:

angular.module('MainCtrl', []).controller('MainController',
   ['$scope','$http','Student',function($scope, $http, Student) {
   $scope.formData = {};
   $scope.loading = true;
   $http.get('/api/studentslist').
   then(function(response) {
      $scope.student = response.data;
   });
   // CREATE 
   // when submitting the add form, send the text to the node API
   $scope.createStudent = function() {
      // validate the formData to make sure that something is there
      // if form is empty, nothing will happen
      if ($scope.formData.name != undefined) {
         $scope.loading = true;
         // call the create function from our service (returns a promise object)
         Student.create($scope.formData)
         // if successful creation, call our get function to get all the new Student
         .then(function (response){
            $scope.student = response.data;
            $scope.loading = false;
            $scope.formData = {}
         },    function (error){
         });
      }
   };
   // DELETE
   ==================================================================
   // delete a todo after checking it
   $scope.deleteStudent = function(id) {
      $scope.loading = true;
      Student.delete(id)
      // if successful delete, call our get function to get all the new Student
      .then(function(response) {
         $scope.loading = false;
         new list of Student
      });
   };
}]);

Запуск приложения

Перейдите в каталог вашего проекта и выполните команду, указанную ниже -

$ npm start

Теперь перейдите к http://localhost:3000 и вы получите страницу, как показано на изображении ниже -

Введите текст в текстовое поле и нажмите Addкнопка. Запись добавляется и отображается следующим образом -

Вы можете удалить запись, установив флажок.