Skip to main content

Node.js

У якості бекенда системи використано NodeJS

Встановлення

Linux

Інструкція з встановлення знаходиться за посиланням

Windows

  1. Скачати образ за посиланням
  2. Встановити образ з викачаного .exe файла

Встановлення пакетів

Після того, як NodeJS було встановлено, потрібно виконати наступні дії для інсталяції усіх потрібних залежностей:

  1. Перейти до директорії NodeJS
  2. Виконати наступну команду npm install

Оновлення пакетів

Усі пакети описані у файлі <директорія ноди>/package.json

Структура файлу має наступний вигляд:

{
"name": "package",
"version": "1.0.0",
"dependencies": {
"<назва пакету>": "<версія>"
}
}

Для зміни версії потрібно пакету, потрібно змінити версію у цьому файлі і виконати наступну команду:

npm install

Також, можна виконати команди відповідно до інструкції за посиланням

Альтернативи використаним npm пакетам

У системі використовуються npm пакети для розв'язання певних задач (перевірка pdf на валідність, робота з мапами, робота з redis і тд.). Альтернативи даним пакетам існують, але зі зміною пакета потрібно змінювати код, бо набір функцій та їх назви можуть відрізнятись

Ризики прямого оновлення пакетів

При прямому новлені пакетів можуть бути оновлені і пакети на які вони посилаються, що може призвести до зміни роботи коду та винекненю помилок. Також оновлені пакети вже можуть не містити методів, які використовуються у коді, що також призведе до винекнення помилок. Щоб не допустити такого сценарію, нижче наведено список пакетів, версії яких не рекомендовано змінювати:

{
"name": "package",
"version": "1.0.0",
"dependencies": {
"@aws-sdk/client-s3": "^3.37.0",
"@grpc/grpc-js": "^1.5.0",
"@grpc/proto-loader": "^0.6.9",
"@iamtraction/google-translate": "^1.1.2",
"@mapbox/mbtiles": "^0.12.1",
"@mapbox/sphericalmercator": "^1.1.0",
"@mapbox/togeojson": "^0.16.0",
"@ngageoint/geopackage": "^4.1.0",
"@pdf-lib/fontkit": "^1.1.1",
"apache-crypt": "^1.2.4",
"autoprefixer": "^10.2.5",
"aws-sdk": "^2.1113.0",
"bee-queue": "^0.3.0",
"body-parser": "^1.19.0",
"carto": "^0.16.3",
"child-process-promise": "^2.2.1",
"connect-multiparty": "^2.2.0",
"connect-redis": "^5.1.0",
"convert-excel-to-json": "^1.7.0",
"csv-parser": "^3.0.0",
"encoding-japanese": "^1.0.30",
"express": "^4.17.1",
"express-cache-response-directive": "^1.1.0",
"express-session": "^1.17.1",
"extract-zip": "^2.0.1",
"fetch": "^1.1.0",
"fs-extra": "^10.0.0",
"got": "^11.8.2",
"handlebars": "^4.7.7",
"iconv-lite": "^0.6.3",
"inspector-api": "^1.4.1",
"ip": "^1.1.5",
"jest-html-reporter": "^3.5.0",
"jest-junit": "^13.2.0",
"joi": "^17.6.0",
"jsdoc-vuejs": "^4.0.0",
"json2csv": "^5.0.7",
"json2xls": "^0.1.2",
"less": "^4.1.1",
"log4js": "^6.3.0",
"markdown-it": "^12.2.0",
"md5": "^2.3.0",
"node-excel-export": "^1.4.4",
"node-html-parser": "^4.1.2",
"node-poppler": "^4.1.1",
"node-ssh": "^12.0.4",
"node-stream-zip": "^1.13.3",
"node-telegram-bot-api": "^0.52.0",
"nodemailer": "^6.5.0",
"otplib": "^12.0.1",
"parse-kml": "^1.0.1",
"passport": "^0.6.0",
"passport-custom": "^1.1.1",
"passport-local": "^1.0.0",
"pdf-lib": "^1.17.1",
"pg": "^8.5.1",
"pm2": "^5.1.2",
"promised-handlebars": "^2.0.1",
"puppeteer": "^13.0.1",
"qr-image": "^3.2.0",
"qrcode": "^1.5.0",
"redis": "^3.1.0",
"request-promise": "^4.2.6",
"require-reload": "^0.2.2",
"sass": "^1.52.3",
"send": "^0.17.2",
"socket.io": "^4.0.1",
"sphericalmercator": "^1.0.5",
"swagger-ui-express": "^4.4.0",
"tiny-async-pool": "^2.1.0",
"uid": "^2.0.0",
"undici": "^5.8.2",
"xls-to-json": "^2.1.0",
"xlsx": "^0.17.3",
"xml-js": "^1.6.11",
"xml2js": "^0.4.23",
"xmldom": "^0.6.0",
"yaml": "^1.10.2",
"yamljs": "^0.3.0"
}
}

Проблеми при виконанні npm install

При використанні npm для встановлення пакетів в проект, можуть виникати різноманітні критичні помилки. Однією з найпоширеніших помилок є конфлікти версій пакетів. Це може статися, коли два або більше пакетів вимагають різні версії одного й того ж пакету. npm намагається вирішити ці конфлікти, але іноді це неможливо без додаткових кроків.

Для вирішення конфліктів версій іноді використовують флаг --force під час виконання npm install. Цей флаг дозволяє "примусово" встановити пакети, незважаючи на конфлікти. Однак важливо бути обережним з його використанням, оскільки це може призвести до непередбачуваного поведінки та проблем у майбутньому.

При розширенні функціоналу встановлення нових бібліотек, слід уникати використання флагу --force та розглядати інші кращі способи вирішення конфліктів версій. Наприклад, можна спробувати оновити всі пакети до їхніх останніх сумісних версій або розглянути реорганізацію залежностей проекту таким чином, щоб уникнути конфліктів. Краще використовувати інструменти та підходи, які сприяють правильній та стабільній роботі проекту, забезпечуючи при цьому потрібний функціонал.

Перед оновленням пакетів, наполегливо рекомендуємо зв'язатись з розробником для консультації.

Автотести

У системі наявні автотести JEST

Для запуску потрібно виконати наступну команду:

npm test

Результат виконання команди:

 PASS  module/core/test/file/helper.test.js
PASS module/core/test/convert.test.js

Test Suites: 2 skipped, 2 passed, 2 of 4 total
Tests: 6 skipped, 4 passed, 10 total
Snapshots: 0 total
Time: 0.97 s
Ran all test suites.
jest-html-reporter >> Report generated (./log/test-report.html)
Test results written to: log\test.json

Результати тестування записуються у теку <тека ноди>/log/test-report.html

Опис автотестів

У системі наявні настуцпні файли автотестів:

Назва файлуЗа що відповідає
util_string.test.jsПеревірка коректності роботи функцій роботи з рядками та вони повертають очікувані результати в різних сценаріях.
util_format.test.jsПеревірка коректності роботи функцій роботи з часом та вони повертають очікувані результати в різних сценаріях
edr.nais.api.test.jsПеревірка коректності роботи функцій інтеграйції з НАІС працюють коректно та повертають очікувані результати в різних сценаріях
helper.test.jsПеревірка коректності роботи функцій підстановки отримання даних із зовнішних джерел для наповнення веб форм
convert.test.jsПеревірка коректності роботи функцій перетворення типів файлів xlsx -> json та html -> pdf
request.test.jsПеревірка коректності виконання запитів до зовнішних ресурсів з модуля