Сай Сарат Чандра, автор Alibaba Cloud Tech Share и Alibaba Cloud MVP

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

Поэтому мы будем использовать ApsaraDB for MongoDB от Alibaba Cloud для сохранения наших данных в облаке. Сохраняя свои данные в облаке, вы можете использовать эти данные в таких приложениях, как Android, iOS и веб-приложениях, а также получать данные в любое время. Alibaba Cloud гарантирует, что данные всегда доступны. Вы также можете использовать Автоматическое эластичное масштабирование, предоставляемое Alibaba Cloud, для вашего бизнеса в любое время.

Настройка серверной части приложения

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

Создаваемый нами API основан на сервере Node и платформе ExpressJS.

Скопируйте код на https://github.com/saichandu415/Electron-Invoice-ApsaraDB-MongoDB и перейдите в папку Invoice_Backend. Откройте файл с помощью вашего любимого текстового редактора.

Нас интересуют только 2 файла:

  • Package.json
    В этом файле содержится вся информация о зависимостях, например о зависимостях разработки.
  • Server.js
    Это ключевой файл, в котором мы пишем логику. В производственных сценариях рекомендуется использовать такие фреймворки, как Loopback, чтобы иметь высокопроизводительный API с гораздо большим контролем.

В Package.json у нас есть стандартный набор зависимостей:

  • Sprint-JS, mongoDB, node-UUID, formidable — для подключения к базе данных и создания URL-адресов во время выполнения.
  • Express и body-parser — используются для создания API и получения входящего запроса в формате JSON.

В Server.js у нас есть следующий код

http.createServer(app).listen(443, function () {
  console.log('Server for Invoice Backend running on port 443!');
});

Вышеуказанное является стандартным набором способов создания http-сервера, прослушивающего запросы на 443. Прежде чем начать, убедитесь, что у вас есть указанные ниже импорты.

const bodyParser = require("body-parser");
const express = require("express");
const app = express();
var uuid = require('node-uuid');
var http = require('http');
var fs = require('fs');
var sprintf = require("sprintf-js").sprintf;
var mongoClient = require('mongodb').MongoClient;

Все эти импорты необходимы для нормальной работы приложения.

app.use(bodyParser.json());

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

Здесь я использую консоль таким образом, что вы можете видеть информацию, как только приложение проходит строку console.log() и понимает, что здесь происходит. В производственной среде не рекомендуется использовать консольные операторы. Вместо этого у вас будет правильный формат ведения журнала для достижения того же.

// ApsaraDB for MongoDB related configurations
var host1 = "dds-6gj540e0c157941.mongodb.ap-south-7.rds.aliyuncs.com";
var port1 = 3012;
var host2 = "dds-6gj54080c157942.mongodb.ap-south-7.rds.aliyuncs.com";
var port2 = 3012;
var username = "root";
var password = "Mongodb@12345";
var replSetName = "mgset-1050000641";
var demoDb = "admin";

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

app.post('/data/invoice', (req, res) => {
  console.log(req.body);   
  var saveData = saveInvoiceData(req.body); 
  saveData.then(function(dbResponse){
    console.log(dbResponse);
    res.status(201).send(dbResponse);
  },function(err){
    console.log(err);
    res.status(400).send(err);
  });
});

Это операция публикации, которая происходит, когда они нажимают кнопку отправки в приложении. Внутри он вызывает метод saveInvoiceData.

Метод saveInvoiceData будет подключаться к БД, аутентифицироваться, находить коллекцию и отправлять данные в БД.

function saveInvoiceData(collectionData) {
  console.log(collectionData);
  return new Promise(function (resolve, reject) {
    // Logic to fetch from the MongoDB
    mongoClient.connect(url, function (err, db) {
      //if error console error
      console.log(err);
      if (err) {
        // Database not connected : error thrown
        console.error("connect err:", err);
        reject(err);
      } else {
        //Database connected successfully, get the DB Object
        var adminDb = db.admin();
        //Authenticate Database
        adminDb.authenticate(username, password, function (err, result) {
          if (err) {
            console.log("authenticate err:", JSON.stringyfy(err));
            reject(err);
          } else {
            console.log('Authenticated : ', JSON.stringify(result));
            // Get the Collection handle.
            var collection = db.collection("saleData");
            collection.insertOne(collectionData,function(err,result){
              if(err){
                reject(err);
              }else{
                resolve(result);
              }
            });
          }
        });
      }
    });
  });
}

Метод получает json-объект collectionData. А остальная информация очевидна из комментариев к методу. Обратите внимание, что данные помещаются в коллекцию «saleData».

Ниже приведен метод GET для получения данных, связанных с информационными панелями.

app.get('/data/dashboard', (req, res) => {
  var getData = getDashboardData();
  getData.then(function(result){
    res.status(200).send(result);
  },function(err){
    console.log(err);
    res.status(400).send(err);
  });
});

Метод GET вызывает «getDashboardData()», чтобы получить данные, обработать их и создать ответ.

function getDashboardData() {
  return new Promise(function (resolve, reject) {
    // Logic to fetch from the MongoDB
    mongoClient.connect(url, function (err, db) {
      //if error console error
      console.log(err);
      if (err) {
        // Database not connected : error thrown
        console.error("connect err:", err);
        reject(err);
      } else {
        //Database connected successfully, get the DB Object
        var adminDb = db.admin();
        //Authenticate Database
        adminDb.authenticate(username, password, function (err, result) {
          if (err) {
            console.log("authenticate err:", JSON.stringyfy(err));
            reject(err);
          } else {
            console.log('Authenticated : ', JSON.stringify(result));
            // Get the Collection handle.
            var collection = db.collection("saleData");
            collection.find({}).toArray(function (err, items) {
              if (err) {
                console.error('Unable to find data' + JSON.stringify(err));
              } else {
                console.info('data Fetched from MongoDB');
                var response = {}; 
                var datesArr = [];
                var salesArr = [];
                var ordersArr = [];
                var i =0;
                for(i=0; i<5; i++){
                  var totalSales = 0;
                var totalOrders = 0;
                  var d = new Date();
                  d.setDate(d.getDate() - i);
                  var month = d.getMonth() + 1;
                  var day = d.getDate();
                  var output = d.getFullYear() + '/' + (month < 10 ? '0' : '') + month + '/' + (day < 10 ? '0' : '') + day;
                  datesArr.push(output);
                console.log("In Loop 1 : "+i);
                  for(var k=0; k<items.length; k++){
                    var item = items[k];
                    if(item.invoiceDate == output){
                      totalSales = totalSales + item.totalAmount;
                      totalOrders = totalOrders+1;
                    }
                  }
                  salesArr.push(totalSales);
                  ordersArr.push(totalOrders);
                }
                response.datesArr = datesArr;
                response.salesArr = salesArr;
                response.ordersArr = ordersArr;
                resolve(response);
              }
            });
          }
        });
      }
    });
  });
}

Здесь многое происходит. Если вы нажмете на указанный ниже URI, вы увидите следующую информацию.

Запрос: GET
http://IP-адрес ВМ: ПОРТ›/data/dashboard

Ответ:

{
    "datesArr": [
        "2018/03/25",
        "2018/03/24",
        "2018/03/23",
        "2018/03/22",
        "2018/03/21"
    ],
    "salesArr": [
        0,
        4197.3,
        34,
        0,
        0
    ],
    "ordersArr": [
        0,
        1,
        1,
        0,
        0
    ]
}

В getInvoiceData() после подключения к базе данных данные аутентифицируются и извлекаются из коллекции. Метод запустит цикл для проверки количества заказов и общей стоимости продажи за последние 5 дней из текущих данных и поместит данные в соответствующие массивы.

Вышеупомянутый ответ отправляется методу /GET, поэтому он запускает цикл for для всех данных и формирует ответ в соответствующие массивы. Облачная ECS».

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

ПОЧТАЛЬОН

Ниже приведен скриншот окна почтальона.

  • Вы можете вызывать различные методы, такие как GET, POST, PUT, PATCH, DELETE.
  • Существует строка URI/адреса, которая также принимает параметры запроса.
  • Нажмите кнопку «Отправить», чтобы сделать запрос и получить ответ.
  • Вы можете узнать больше об этом, вы можете запустить тестовые случаи или тестирование максимальной производительности. Это бесплатный инструмент, который вы можете использовать в коммерческих целях.

Развертывание API

У вас уже должна быть настроена Alibaba Cloud ECS. Вы можете ознакомиться с другими руководствами по созданию экземпляра ECS, если не уверены в этом.

Создание экземпляра MongoDB:
1. Вам необходимо активировать ApsaraDB для MongoDB в консоли Alibaba Cloud.
2. Перейдите к консоли ApsaraDB для MongoDB и выберите соответствующую зону.
3. Нажмите Создать экземпляр.
4. Тщательно выберите все конфигурации, связанные с инфраструктурой, такие как ОЗУ и пропускная способность.
5. Если вы используете пароль, бережно сохраните его для использования в будущем. Мы будем использовать наш код для аутентификации.
6. Предварительно просмотрите и создайте экземпляр, приняв положения и условия.
7. После создания экземпляра перейдите к сведениям об экземпляре и внесите его в белый список. IP-адрес экземпляра ECS.
8. После перехода к правилам белого списка вы увидите кнопку Импорт IP-адреса ECS. При нажатии на кнопку IP-адрес внутренней сети ECS будет импортирован автоматически.
9.Через несколько секунд вы сможете увидеть Строку подключения, которая появится на консоли. Вы можете использовать эту информацию для подключения клиентов MongoDB с графическим интерфейсом к ApsaraDB для MongoDB.
10. Другая индивидуальная информация необходима для подключения MongoDB через код. Убедитесь, что вы заменили эту информацию в коде для подключения к вашей базе данных.

Запуск кода

После того, как вы скопируете код в экземпляр ECS, вам необходимо выполнить следующие команды для успешного выполнения:

1.Npm install
a. Этот пакет загружает и устанавливает все необходимые пакеты из репозитория npm
2.Npm start / node app.js
a. Это запустит приложение, и после запуска сервера вы сможете вызывать API.

Вывод

В этой статье мы увидели, что такое Electron JS? Мы также создали пользовательский интерфейс вместе с Backend API. Мы также увидели, как мы можем использовать ApsaraDB для MongoDB для настольных приложений, которые обеспечивают дополнительную ценность продукта, который мы создаем для наших клиентов.

Весь код представлен в репозитории github. Если у вас есть вопрос о чем-то, пожалуйста, поднимите его как вопрос по следующей ссылке:

https://github.com/saichandu415/Электрон-Инвойс-ApsaraDB-MongoDB

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

Ссылка:

https://www.alibabacloud.com/blog/invoice-application-backend-using-apsaradb-for-mongodb_582734?spm=a2c41.11448651.0.0