Angular 6 - Ускоренный курс MEAN Stack - Часть 3: Подключение Front-end к Back-end

Это сообщение было впервые опубликовано на CodingTheSmartWay.com.

Подпишитесь на YouTube | Живая демонстрация | Код на GitHub

Создание приложения Angular 6 CRUD с нуля с помощью MongoDB, Express, Node.js и пользовательского интерфейса Material Design

Это третья часть ускоренного курса Angular 6 MEAN Stack. В первой части этой серии вы узнали, как создать интерфейсное приложение Angular 6, настроить базовую структуру проекта путем создания компонентов и настройки маршрутизации на стороне клиента.

Во второй части мы рассмотрели внутренний проект приложения стека MEAN. Мы реализовали сервер Node.js / Express, который подключен к экземпляру базы данных MongoDB. Мы реализовали конечные точки сервера, принимающие HTTP-запросы для создания, обновления, удаления и получения данных о проблемах.

Если вам нравится CodingTheSmartWay, подумайте о поддержке нас через Patreon. С вашей помощью мы сможем чаще выпускать руководства для разработчиков. Большое спасибо! Станьте покровителем!

В этой части мы реализуем класс обслуживания Angular в нашем интерфейсном проекте, который используется для подключения к серверной части. Затем этот сервис используется в различных компонентах нашего интерфейсного приложения. Реализация службы Angular для доступа к серверной части помогает нам сохранить наш код в СУХОМ состоянии, инкапсулируя логику, необходимую для доступа к серверной части REST, в один единственный класс.

Давайте еще раз взглянем на обзор стека MEAN:

Добавление услуги

Добавить службу в проект Angular легко, если снова использовать Angular CLI. Сначала перейдите в папку проекта внешнего интерфейса.

$ cd frontend

Затем выполните следующую команду Angular CLI в этой папке:

$ ng g s Issue

При выполнении этой команды в приложение добавляется новый файл issue.service.ts с новой реализацией службы по умолчанию. Эта команда также гарантирует, что этот новый класс обслуживания импортирован в app.module.ts:

import { IssueService } from './issue.service';

и добавлен в массив, который назначен свойству Provider декоратора @NgModule:

providers: [IssueService]

Это необходимо для использования IssueService в компонентах нашего приложения.

Реализация IssueService

Приступим к реализации класса обслуживания. Поскольку служба должна иметь доступ к серверной части путем отправки HTTP-запроса, нам сначала нужно включить HttpClient Angular в issue.service.ts, добавив следующий оператор импорта:

import { HttpClient } from '@angular/common/http';

Затем обязательно вставьте HttpClient в конструктор класса службы:

constructor(private http: HttpClient) {}

Получение проблем

Служба должна содержать служебные методы для получения данных о проблемах из серверной части:

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

Давайте добавим методы getIssues и getIssueById в класс IssueService следующим образом:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
  providedIn: 'root'
})
export class IssueService {
  uri = 'http://localhost:4000';
  constructor(private http: HttpClient) {
  }
  getIssues() {
    return this.http.get(`${this.uri}/issues`);
  }
  getIssueById(id) {
    return this.http.get(`${this.uri}/issues/${id}`);
  }
}

Используя экземпляр HttpClient, доступный через http, можно получить полный список проблем, выполнив:

this.http.get(`${this.uri}/issues`);

При этом мы отправляем HTTP-запрос GET на конечную точку / issues внутреннего сервера. Список проблем извлекается из базы данных MongoDB, а затем возвращается в формате JSON.

Аналогичным образом работает метод getIssueById. Кроме того, он принимает параметр (идентификатор проблемы, которую необходимо получить) и передает значение параметра конечной точке / issues /: id.

Добавление проблем

Для добавления новых задач добавлен служебный метод addIssue:

addIssue(title, responsible, description, severity) {
    const issue = {
      title: title,
      responsible: responsible,
      description: description,
      severity: severity
    };
    return this.http.post(`${this.uri}/issues/add`, issue);
  }

Этот метод принимает четыре параметра (название, ответственный, описание и серьезность). Со значениями, доступными в этом параметре, создается новый объект задачи. При использовании метода http.post для конечной точки / issues / add инициируется HTTP-запрос POST, и новый объект задачи передается в данные тела запроса.

Обновление проблем

Чтобы обновить существующие проблемы, нам нужно отправить запрос POST в / issues / update / $ {id} и обязательно передать обновленный объект задачи в качестве данных тела:

updateIssue(id, title, responsible, description, severity, status) {
    const issue = {
      title: title,
      responsible: responsible,
      description: description,
      severity: severity,
      status: status
    };
    return this.http.post(`${this.uri}/issues/update/${id}`, issue);
  }

Удаление проблем

Также просто предоставить сервисный метод для удаления проблем:

deleteIssue(id) {
    return this.http.get(`${this.uri}/issues/delete/${id}`);
  }

В следующем листинге вы снова можете найти полный код файла issue.service.ts:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
  providedIn: 'root'
})
export class IssueService {
  uri = 'http://localhost:4000';
  constructor(private http: HttpClient) {
  }
  addIssue(title, responsible, description, severity) {
    const issue = {
      title: title,
      responsible: responsible,
      description: description,
      severity: severity
    };
    return this.http.post(`${this.uri}/issues/add`, issue);
  }
  getIssues() {
    return this.http.get(`${this.uri}/issues`);
  }
  getIssueById(id) {
    return this.http.get(`${this.uri}/issues/${id}`);
  }
  updateIssue(id, title, responsible, description, severity, status) {
    const issue = {
      title: title,
      responsible: responsible,
      description: description,
      severity: severity,
      status: status
    };
    return this.http.post(`${this.uri}/issues/update/${id}`, issue);
  }
  deleteIssue(id) {
    return this.http.get(`${this.uri}/issues/delete/${id}`);
  }
}

Внедрение службы

Поскольку три компонента, которые были созданы в нашем приложении Angular, уже должны использовать службу для доступа к серверной части, нам необходимо ввести IssueServices в ListComponent, EditComponent и CreateComponent. Прежде всего добавьте следующие операторы импорта в файлы list.component.ts, edit.component.ts и create.component.ts.

import { IssueService } from '../../issue.service';

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

constructor(private issueService: IssueService, private router: Router) { }

Что дальше

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

Это сообщение было впервые опубликовано на CodingTheSmartWay.com.

Angular и NodeJS №1 - Руководство по стеку MEAN

Узнайте, как подключить ваш Angular Frontend к Backend NodeJS, Express и MongoDB, создав реальное приложение
Go To Course…

# 2 Angular 6 - Полное руководство

Осваивайте Angular (Angular 2+, включая Angular 6) и создавайте потрясающие, реактивные веб-приложения с преемником Angular.js
Go To Course…

Заявление об ограничении ответственности: это сообщение содержит партнерские ссылки. Это означает, что если вы нажмете на одну из ссылок на продукт, я получу небольшую комиссию. Это поможет поддержать этот блог!