Сай Сарат Чандра, автор 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
Если вы считаете, что можете улучшить код, поднимите его как запрос на включение.
Ссылка: