ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 310

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Көптеген жетілген тілдік платформаларда (мысалы, Perl немесе Python) Операциялық жүйелердің дистрибутивтеріне кіретін тұрақты құралдар жиынтығы мен API қалыптасқан. Бірақ түйін әлі де тез дамып келеді, сондықтан ОЖ дистрибутивтеріне дайын екілік құрылымдарды қосу ертерек болар еді. Сондықтан түйінді орнатудың қолайлы әдісі-бастапқы кодтан құрастыру. Ол үшін (мысалы, GCC) және Python 2.4 (немесе одан кейінгі нұсқасы) бар тіл компиляторы қажет. Егер сіз желілік кодта шифрлауды қолдансаңыз, сізге OpenSSL криптографиялық кітапханасы қажет болады. Қазіргі UNIX клондарында бұл құралдар әрдайым дистрибутивке қосылады, ал Node конфигурация сценарийі олардың қатысуын анықтайды.Windows ОЖ POSIX-пен үйлесімді болмаса да, Node-ді POSIX-үйлесімді орталарды қолдана отырып орнатуға болады (Node 0.4 нұсқасында.x және одан бұрынғы). 0.6 нұсқасынан бастап.x, Node әзірлеушілері Windows үшін табиғи құралдармен құрастыру мүмкіндігін қамтамасыз етуді көздейді.Түйінде бар деректерді сақтау әдістерін қарастырыңыз. Express веб-қаңқасы қаншалықты қуатты болса да, одан деректерді сақтай алмай-ақ, оның мағынасы аз. Әдетте деректер кейбір мәліметтер базасында сақталады. Бүгінгі таңда әртүрлі жағдайларға арналған мәліметтер базасының технологиялары бар-дәстүрлі SQL негізіндегі қоймалар, SQL қолданбай құжатқа бағытталған мәліметтер базасы, қарапайым кілттер мен мәндер қоймалары немесе YQL типті веб-сұрау қызметтері.2.5 Жүйені инициализациялау кезеңінде Node серверлерін іске қосуСерверлік процестерді іске қосудың жалпы қабылданған тәсілдері бар, әр амалдық жүйеде. Node сервері кез-келген басқа фондық процесс сияқты іске қосылады (sshd, apache, MySQL және т.б.), мысалы, іске қосу және тоқтату сценарийлері арқылы.Node жобасына барлық операциялық жүйелер үшін іске қосу және тоқтату сценарийлері кірмейді. Бұл дұрыс шығар: түйінді тарату мұндай сценарийлер үшін орын емес. Олар Node үшін серверлік қосымшалардың бөлігі болуы керек деп саналады. Дәстүрлі түрде жүйені инициализациялауды init демоны басқарды, ол /etc / init каталогындағы сценарийлер арқылы фондық процестерді басқарады.d. Fedora және Red hat дистрибутивтерінде бұл процесс әлі де бар, ал басқа жүйелерде Upstart немесе launchd сияқты басқа жын менеджерлері қолданылады.Іске қосу және тоқтату сценарийлерін Жазу-Бұл істің бір бөлігі ғана. Веб-серверлер сенімді болуы керек (мысалы, апаттан кейін автоматты түрде қайта іске қосылады), оңай басқарылатын (жүйені басқарудың қабылданған тәжірибесімен жақсы интеграцияланған), бақылауға мүмкіндік беретін (STDOUT-та шығарылғанның бәрін журналдарға сақтаңыз) және т. б. Node - бұл дайын емес, серверлерді құруға арналған бөлшектерді қамтитын конструктор, аяқталған сервер. Node платформасында осы веб-серверді іске асыру үшін ОЖ-де бар фондық процестерді басқару құралдарымен интеграциялау, журналдар жүргізу, зиянды клиенттерден қорғауды қамтамасыз ету үшін сценарийлер жазу қажет, мысалы, DoS шабуылдары және тағы басқалар.
Төменде жүйені инициализациялаудан бастап сервердің үздіксіз болуын қамтамасыз ететін бірнеше операциялық жүйелердегі фондық процестерді басқару құралдарымен Node серверлерін біріктіру құралдары мен әдістері келтірілген:autorestart (https://github.com/shimondoodkin/nodejs-autorestart) - upstart (Ubuntu, Debian және т. б.) пайдаланылатын Linux дистрибутивтерінде Node данасын басқару;(https://github.com/pgte/fugue) бақылайды Node-сервер және сәтсіздіктен кейін оны қайта іске қосады; (https://github.com/indexzero/forever) - Node шағын командалық утилитасы, бұл сценарийдің "мәңгі" жұмыс істеуін қамтамасыз етеді. "Мәңгілік" деген не, Чарли Роббинс(CharlieRobbins) блог мақаласын жазды (http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever); init (https://github.com/frodwith/node-init)-түйін-түйін қолданбасын инициализация кезеңінде іске қосылатын LSB үйлесімді сценарийге айналдыратын Сценарий. LSB (LinuxStandardBase) - Linux үйлесімділік сипаттамасы;Debian үшін (http://people.debian.org/enrico/launchtool.html) - кез-келген команданың, оның ішінде демон түрінде іске қосылуын басқаруға арналған жүйелік утилита;Ubuntu үшін upstart құралы (http://upstart.ubuntu.com/), автономды түрде пайдалануға болады (http://caolanmcmahon.com/posts/deploying_node_js_with_upstart) немесе monit-пен бірге (http://howtonode.org/deploying-node-upstart-monit) Node серверін басқару үшін;Mac OS X жүйесінде launchd үшін сценарий жазу керек. Apple launchd сценарийлерін жасау бойынша Нұсқаулықты орналастырды http://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/LaunchOnDemandDaemons.html көп ядролы жүйеде барлық процессорлық ядроларды пайдалану бір ағынды JavaScript қозғалтқышы. Chrome браузері үшін бұл жеткілікті, бірақ жаңадан сатып алынған 16 ядролы серверде жұмыс істейтін Node сервері тек бір ядроны пайдаланады, ал қалғандарының 15-і бос тұрады.Бір ағынды процесс тек бір процессор ядросын пайдаланады. Бұл ешқайда кетпейтін факт. Бір процесте бірнеше ядроларды тарту үшін көп ағынды бағдарлама қажет. Алайда, Node-де қабылданған ағынсыз дизайн парадигмасы бағдарламалау моделін жеңілдетуге мүмкіндік берсе де, бір уақытта Node бірнеше ядроларды пайдаланбайтынын білдіреді.Сенімділікті арттыру және барлық қол жетімді процессор ядроларын тарту үшін Node мультипроцессорлық конфигурацияларын әзірлеуге арналған бірнеше жобалар бар.Негізгі идея-бірнеше түйін процестерін іске қосу және олардың арасында келіп түскен сұрауларды тарату. Бір ағынды процестердің кластері арқылы сіз барлық ядроларды пайдалана аласыз.Осындай жобалардың бірі Cluster деп аталады (https://github.com/LearnBoost/cluster), авторлар оны " Node үшін кеңейтілген көп ядролы сервер менеджері.js». Ол еншілес процестердің конфигурацияланатын жиынтығын іске қосады, сәтсіздікке ұшырағаннан кейін оларды қайта іске қосады және протоколдаудың, пәрмен жолынан басқарудың және статистиканы жинаудың бай құралдарына ие. Бұрынғы Spark жобасы cluster-ге жол беріп, жабылды.

2.6 Node МодуліМодульдер мен пакеттер - бұл қосымшаны кішігірім бөліктерге бөлуге мүмкіндік беретін құрылыс блоктары.Node модульдерін іске асыруға CommonJS модульдерінің спецификациясы үлкен әсер етті, дегенмен айырмашылықтар да бар. Бірақ бұл айырмашылықтар Node және CommonJS негізіндегі басқа жүйелер үшін жалпы кодты жазу арқылы ғана көрінеді. Modules/1.1.1 спецификациясына жылдам қарау айырмашылықтардың шамалы екенін көрсетеді.Node-де Модульдер файлдарда, әр файлда бір модульде сақталады. Модульдерді атаудың және оларды файлдық жүйеге орналастырудың бірнеше тәсілдері бар. Жалпы алғанда, бұл өте икемді жүйе,әсіресе npm, Node үшін стандартты пакет менеджері.Модуль идентификаторлары және жолдарыЖалпы айтқанда, модуль атауы-бұл жол, бірақ файл атауын кеңейтусіз. Осылайша, біз require('./ қарапайым'), түйін файл атауына кеңейтім қосу керек екенін біледі .js және қарапайым файлды жүктеп алыңыз.js.Әрине, атаулары аяқталатын файлдар күтілуде .js, JavaScript - те жазылған кодты қамтиды. Node сонымен қатар екілік платформалық кітапханалар түріндегі модульдерді қолдайды. Бұл жағдайда Файл атауы кеңейтумен аяқталуы керек .node.Кейбір Node модульдері файлдық жүйедегі файлдар емес, Node орындалатын файлына "тігілген". Бұл сайтта құжатталған ядро модульдері (Core) nodejs.org. бастапқыда олар Node бастапқы кодының ағашындағы файлдар түрінде болады, бірақ құрастыру барысында орындалатын файлға жинақталады.Модуль идентификаторларының үш түрі бар: салыстырмалы, абсолютті және жоғарғы деңгей.Салыстырмалы модуль идентификаторлары жолдан басталады"./ "немесе"../ ", ал абсолютті " / " жолымен. Мұнда POSIX-пен үйлесімді файлдық жүйенің семантикасымен толық ұқсастық бар, онда жолдар орындалатын файлға қатысты жазылады.Абсолютті модуль идентификаторлары файлдық жүйенің түбіріне қатысты жазылатыны түсінікті.Жоғарғы деңгейдегі модуль идентификаторының басында "жоқ".", жоқ"..", "/"емес, бұл тек модульдің атауы. Мұндай Модульдер node_modules сияқты бірнеше алдын ала анықталған каталогтардың бірінде немесе require массивінде тізімделген каталогтарда сақталады.paths.2.6.1 Қолданба ішіндегі жергілікті МодульдерБарлық елестетілетін модульдерді екі санатқа бөлуге болады: қолданбаның бөлігі және бөлігі емес. Белгілі бір қосымшаның бөлігі болып табылмайтын Модульдер қандай да бір жалпыланған мақсатты ескере отырып жазылған. Тек сіздің қосымшаңызда қолданылатын модульдерді енгізуден бастайық.Әдеттегі қосымшада Модульдер Бірнеше каталогтарға бөлінеді. Олар нұсқаларды басқару жүйесінде сақталады және кейіннен серверлерге көшіріледі. Бұл модульдер өздерінің "бауырларына" қатысты жолдарды біледі және бұл ақпаратты бір-біріне, бірақ салыстырмалы идентификаторларға сілтеме жасау үшін пайдалана алады.
Мұның қалай ұйымдастырылғанын жақсы түсіну үшін мысал ретінде Node пакеттерінің бірінің құрылымын, Express веб-қосымшаларын әзірлеу шеңберін алайық. Ол Express әзірлеушілері пайдалы деп санайтын иерархия түрінде ұйымдастырылған бірнеше модульдерден тұрады. Мұндай иерархияларды қосымшаның белгілі бір қиындық деңгейіне жеткенде, оны модульден үлкен, бірақ қосымшадан кіші бөліктерге бөлуді негіздейтін кезде жасау мағынасы бар. Өкінішке орай, түйінде мұндай құрылымдық компоненттер үшін арнайы термин жоқ, сондықтан сіз "модульден үлкен бөліктерге бөлу"деген сөз тіркесін қолдануыңыз керек. Мұндай бөліктердің әрқайсысы бірнеше модульдері бар каталог ретінде ұсынылады.Node_modules каталогындағы модульдерді қосу үшін жоғарғы деңгей идентификаторы қолданылады:express = require('express');барлық node_modules каталогтарында модульдерді іздейді және олардың бірнешеуі бар. Алгоритм ағымдағы модуль каталогынан іздей бастайды, содан кейін жолға node_modules қосады және сол жерден іздейді. Егер модуль node_modules каталогында табылмаса, онда түйін ата - аналық каталогқа өтіп, файлдық жүйенің түбіріне жеткенше қайталап көреді.Бірақ егер біз Express жақтауын өз бағдарламамызда қолданғымыз келсе ше? Күрделі ештеңе жоқ, тек қосымшаның ағашының ішінде node_modules каталогын жасаңыз және Express-ті сол жерге орнатыңыз:


Мұнда drawapp гипотетикалық қосымшасы көрсетілген. Егер node_modules каталогы суретте көрсетілгендей орналасса, онда drawapp ішіндегі кез-келген модуль express-ке келесідей қол жеткізе алады:

express = require( express');
Дегенмен, дәл сол Модульдер Express жақтауының бөлігі болып табылатын node_modules каталогында жасырылған qs модуліне жете алмайды. Қажетті модульді қамтитын node_modules каталогтарын қарау файлдық жүйенің иерархиясы бойынша, еншілес каталогтарға кірмей жасалады.

Сол сияқты: Егер сіз модульді lib/node_modules каталогына орнатсаңыз, ол draw ішінен қол жетімді болады.js және svg.js, бірақ index-тен қол жетімді емес.js. Бұрынғыдай, іздеу қазіргі каталогтан жоғары қарай жүреді және оған терең енбейді.

Каталогтарды айналып өту кезінде node_modules түйіні қажетті модульді тапқаннан кейін тоқтайды. Сонымен, егер сілтеме draw,js немесе svg файлында болса.js, содан кейін келесі каталогтар қаралады:
/home/david/projects/drawapp/lib/node_modules

/home/david/projects/drawapp/node_modules

/home/david/projects/node_modules

/home/david/node_modules

/home/node_modules

/node_modules
Node_modules каталогы пакетті басқару жүйесіне қайшылықты нұсқалардың лабиринтінен шығуға мүмкіндік беретін маңызды рөл атқарады. Барлық модульдерді бір жерге қойып, қарама-қайшы нұсқа нөмірлеріне тәуелділікті шешуге тырысудың орнына, біз бірнеше node_modules каталогтарын бастай аламыз және қажет болған жағдайда белгілі бір нұсқаларды белгілі бір жерге жинай аламыз. Бір модульдің әртүрлі нұсқалары әртүрлі node_modules каталогтарында болуы мүмкін және бұл каталогтар бір-біріне қатысты дұрыс орналастырылған жағдайда ешқандай қақтығыстар болмайды.

Мысалы, біз forms модулін қолданатын қосымшаны жазайық (https://github.com/caolan/forms) пішіндерді құру үшін және сізде жүздеген пішіндер жиналған кезде, модуль авторлары оған сәйкес келмейтін өзгерістер енгізді. Барлық пішіндерді бірден қайта жасап, қайта тексергіңіз келмейді, мұны біртіндеп жасаған дұрыс. Ол үшін қосымшада екі каталог жасау керек, әрқайсысында node_modules ішкі каталогын ұйымдастырып, оларға forms Модулінің әртүрлі нұсқаларын орналастыру керек. Содан кейін, келесі форма жаңа форма модуліне ауысқан кезде, оның коды Жаңа Нұсқа орналасқан каталогқа ауысады.

2.6.3 Require.paths массивінде тізімделген каталогтардағы жүйелік Модульдер

Каталогтарды іздеу кезінде node_modules түйіні қолданба ағашымен шектелмейді. Алгоритм файлдық жүйенің түбіріне жетеді, сондықтан сіз /node_modules каталогын құрып, ондағы модульдердің Ғаламдық репозиторийін ұйымдастыра аласыз. Дәл осы жерде басқа жерден табылмаған модульді іздеу аяқталады.

Бірақ түйін require айнымалысы, жолдар негізінде тағы бір механизмді ұсынады. Бұл модульдерді іздеу керек каталог атауларының массиві.

Мысал келтірейік:
$ node

> require.paths;

["/home/david/.node_modules",''/home/david/.node_libraries", "/usr/local/lib/node"]

Для заполнения массива require,paths используется переменная окружения NODE_PATH:

$ export NODE_PATH=/usr/lib/node

$ node

> require.paths;

["/usr/lib/node","/home/david/.node_libraries","/usr/local/lib/node”]

>
Бұрын Node бағдарламаларында require массивіне жаңа элементтер қосу үшін келесі идиома жиі қолданылатын.paths:require.paths.push(__dirname). Алайда, қазір бұл ұсынылмайды, өйткені бұл шатасудың көзі болып табылады. Бұл идиома пайда болатын Модульдер осылай жасалуы мүмкін және әлі де бар, бірақ оны қолдануға үлкен келіспеушілікпен қарайды. Егер бірнеше модуль каталогтарды require ішіне орналастырса.жолдар, нәтижелер болжау мүмкін емес.

Көп жағдайда модульдерді node_modules каталогына орнату ұсынылады.

Құрама Модульдер-Модульдер-каталогтар

Құрама модуль бірнеше ішкі модульдерді, деректер файлдарын, үлгі файлдарын, құжаттаманы, тестілерді және т.б. қамтуы мүмкін. Мұның бәрін жақсы ойластырылған каталог құрылымына орналастыруға болады, оны түйін модуль ретінде қарастырады және require('moduleName') пәрменімен жүктейді. Ол үшін каталогқа index Модулінің файлын қосу керек.js немесе package деп аталатын файл.json. Package файлы.json модульді сипаттайтын деректерді package файл пішіміне өте ұқсас форматта қамтуы керек.npm пакет менеджері қолданатын json (төменде қараңыз). Екі жағдайда да npm танитын өрістердің өте аз жиынтығы түйінмен үйлесімділік үшін жеткілікті.

Дәлірек айтқанда, түйін package файлындағы келесі өрістерді таниды.json:
{ { name: "my Awesome Library",: "./lib/awesome.js" }
Мұндай package файлымен.JSON require пәрмені ('myAwesomeLibrary') осы каталогты тауып, файлды жүктейді
/path/to/node_modules/myAwesomeLibrary/lib/awesome.js
Егер файл package болса.json жоқ, содан кейін түйін оның орнына index файлын іздейді.js, яғни файлды жүктеу:
/path/to/node_modules/myAwesomeLibrary/index.js
Қалай болғанда да (индекс.js немесе package.json) ішкі модульдер мен басқа файлдарды қамтитын құрама модульді енгізу оңай. Жоғарыда қарастырылған Express пакетінің құрылымына оралсақ, кейбір модульдер пакеттегі басқа модульдерге сілтеме жасау үшін салыстырмалы идентификаторларды қолданатынын көреміз, ал басқа біреу жасаған модульдерді қосу үшін node_modules каталогын пайдалануға болады.

Node үшін пакет менеджері (npm)- бұл іс жүзінде стандартқа айналған Node үшін пакетті басқару және тарату жүйесі. Тұжырымдамада ол apt-get (Debian), rpm/yum (Red hat/Fedora), MacPorts (Mac OS X), CPAN (Perl) және PEAR (PHP) сияқты құралдарға ұқсас. Оның міндеті - қарапайым командалық жол интерфейсі арқылы Интернет арқылы Node пакеттерін жариялау және тарату. Npm белгілі бір тапсырманы орындау үшін пакеттерді жылдам табуға, оларды жүктеуге және орнатуға, сондай-ақ бұрыннан орнатылған пакеттерді басқаруға мүмкіндік береді.

Npm Commonjs спецификациясына негізделген Node үшін пакет пішімін анықтайды.

Npm пакетінің форматы пакет-бұл пакет файлында сипатталған каталог құрылымы.json. Біз жоғарыда композиттік модульді осылай анықтадық, айырмашылығы тек npm түйінге қарағанда әлдеқайда көп өрістерді таниды. Package форматын анықтаудың бастапқы нүктесі,npm үшін json Common JS packages/1.0 спецификациясы болды. Package файл құрылымының құжаттамасын алыңыз,json келесі пәрменге мүмкіндік береді:
$ npm help json
Простейший файл package,json выглядит следующим образом:
{ name: "packageName",: "1.0",: "mainModuleName",: {

"mod1”: "lib/mod1",

"mod2": "lib/mod2"

}

}
Файл JSON форматында ұсынылған, c. сіз JavaScript бағдарламашысы ретінде жүздеген рет кездескен болуыңыз керек.

Ең маңызды Name және version өрістері. Name мәні URL мекенжайлары мен пәрмен атауларына ауыстырылады, сондықтан оны осы контексттердегі қауіпсіздікті ескере отырып таңдау керек. Егер біз пакетті жалпыға ортақ npm пакеттік репозиторийінде жариялайтын болсақ, онда таңдалған атаудың алынғанын тексеру керек. Ол үшін сайтқа жүгінуге болады http://search.npmjs.org келесі пәрмен арқылы:
$ npm search packageName
Main өрісі құрама модельдердегідей мақсатқа қызмет етеді (алдыңғы бөлімді қараңыз). Ол require('package Name') функциясын шақырған кезде жүктелетін модульге сілтеме жасайды. Пакеттерде көптеген модульдер болуы мүмкін және олардың барлығын Модульдер тізімінде тізімдеуге болады.

Пакеттерді TGZ мұрағаттарына жинауға болады, бұл әсіресе Интернет арқылы таратуға ыңғайлы.

Пакет басқа пакеттерге тәуелділікті жариялай алады. Дәл осы мүмкіндіктің арқасында npm нақты орнатылған модульге қажетті модульдерді автоматты түрде орната алады. Тәуелділіктер келесідей жарияланады:
"dependencies":

{ "foo" : "1.0.0 - 2.9999.9999"

, "bar" : ">=1.0.2 <2.1.2"

}

Адамдарға пакетті rpm репозиторийінен табу оңайырақ болады (http://search.npmjs.org), егер пакет сипаттамамен (сипаттама өрістері) және кілт сөздермен (кілт сөздер өрісі) жабдықталған болса. Иесі туралы ақпарат homepage, author және contributors өрістеріне арналған:
"description”: "My wonderful packages walks dogs",

"homepage": "http://npm.dogs.org/dogwalker/",

"author": dogwhisperer@dogs.org
Кейбір npm пакеттеріне берілген пайдаланушы үшін path айнымалысында көрсетілген каталогқа орнатылуы керек орындалатын бағдарламалар кіреді. Олар bin өрісі арқылы жарияланады. Бұл командалардың аттарын оларды іске асыратын сценарийлердің аттарына көрсететін сөздік. Командалық сценарийлер көрсетілген атпен node орындалатын файлын қамтитын каталогқа орнатылады.
bin: {

'nodeload.js': './nodeload.js , 'nl.js': './nl.js'

}
Directories өрісі пакеттің каталог құрылымын құжаттайды. Lib каталогы жүктелетін модульдерді іздеу кезінде автоматты түрде қаралады. Екілік файлдарға, Нұсқаулық беттеріне және құжаттамаға арналған өрістер де бар.
directories: { lib: './lib', bin: './bin' },
Сценарийлер өрісінде пакеттің өмірлік циклінің әртүрлі кезеңдерінде іске қосылатын сценарий командалары келтірілген, атап айтқанда: орнату, белсендіру, жою, жаңарту және т. б. сценарий командалары туралы қосымша ақпарат алу үшін келесі пәрменді енгізу керек:
$ npm help scripts
Бұл rpm пакеттерінің форматына қысқаша кіріспе, толық құжаттаманы алу үшін npm help json теру керек.

Пакеттің нұсқалары мен нұсқаларының ауқымы нұсқа нөмірлері туралы ештеңе білмейді. Ол Модульдер туралы біледі және каталог құрылымын модуль сияқты түсіндіре алады. Түйінде модульдерді іздеудің дамыған жүйесі бар, бірақ ондағы нұсқа нөмірлері ескерілмейді. Дегенмен, npm нұсқа нөмірлері туралы біледі. Ол семантикалық нұсқаның моделін қолданады (төменде қараңыз) және біз көргеніміздей, модульдерді Интернет арқылы орнатып, ескірген модульдерді іздеп, жаңарта алады. Бұл операциялардың барлығы нұсқаларға байланысты, сондықтан npm нұсқа нөмірлері мен белгілерін қалай өңдейтінін мұқият қарастырайық.

Біз бұрын орнатылған пакеттерді тізімдеу үшін npm list пәрменін қолдандық Және бұл тізімде нұсқа нөмірлері де көрсетілген. Егер сізге белгілі бір модульдің нұсқа нөмірін ғана білу қажет болса, онда келесі пәрмен қолайлы:
$ npm view express version
Npm командасы пакеттің атын қабылдаған барлық жағдайларда, сіз атаудың соңына нұсқа нөмірін немесе белгісін қоса аласыз. Бұл пакеттің белгілі бір нұсқасымен жұмыс істеуге мүмкіндік береді. Мысалы, егер сіз бағдарламаны сынақ ортасында пакеттің белгілі бір нұсқасымен сынап көрген болсаңыз, онда сіз сол нұсқаны өндірісте де орната аласыз:

$ npm install express@2.3.1@1.2.2 ./node_modules/express/node_modules/mime@1.5.1 ./node_modules/express/node_modules/connect@0.2.0 ./node_modules/express/node_modules/qs

express@2.3.1 ./node_modules/express
Npm-де жапсырма (tag) тұжырымдамасы бар, оны пакеттің ең жаңа, тұрақты нұсқасын орнату үшін пайдалануға болады:
$ npm install sax@stable

Жапсырма атаулары ерікті және міндетті емес. Оларды пакеттің авторы таңдайды және олар барлық пакеттерде қолданылмайды.package файлында сақталған басқа пакеттерге тәуелділіктерді көруге мүмкіндік береді:
$ npm view mongoose dependencies

{ hooks: '0.1.9' }

$ npm view express dependencies

{ connect: ’>= 1.5.1 < 2.0.0',: '>= 0.0.1',: '>= 0.0.6’ }
Тәуелділіктер-бұл npm басқа қандай модульдерді орнату керектігін білетін механизм. Модульді орнату кезінде npm оның не тәуелді екенін қарастырады және бұрын орнатылмаған модульдерді орнатады.

Бұл жүйе бағдарламалық жасақтамамен кем дегенде бір рет айналысқан кез келген адамға қарапайым және түсінікті болғанымен, оның артында қатаң модель бар. Нұсқаларды нөмірлеу жүйесін жүзеге асыра отырып, npm авторы сайтта жарияланған семантикалық нұсқаның сипаттамасын қолданды http://semver.org. ол келесідей тұжырымдалған:

Нұсқалар X. Y. z түріндегі жолдармен ұсынылады, мұндағы X, Y және Z әдетте бүтін сандар болып табылады; X-негізгі нөмір, Y - қосымша нөмір, Z-түзету нөмірі (мысалы, 1.2.3).

Түзету нөмірінен кейін жолда "арнайы нұсқалар" деп аталатын еркін мәтін көрсетілуі мүмкін (мысалы, 1.2.3 betal).

Нұсқа нөмірлерін салыстыру кезінде жолдар емес, X, Y және Z сандары салыстырылады.мысалы, 1.9.0 < 1.10.0 < 1.11.3. және 1.0.0 beta < 1.0.0 beta2 < 1.0.0.

Үйлесімділік келесі нұсқаларды нөмірлеу келісімдері арқылы құжатталады:

0 (X = 0) негізгі нұсқа нөмірі бар пакеттер мүлдем тұрақсыз, олардың API кез келген уақытта өзгеруі мүмкін;

егер өзгеріс тек қателерді түзетсе және кері үйлесімділікке кепілдік берсе, онда түзету нөмірін (Z)көбейту керек;

қосымша нұсқа нөмірін (Y) кері үйлесімділікті сақтайтын функционалдылықты қосқанда көбейту керек (мысалы, жаңа функция қосылды, ал басқалары кері үйлесімді);

негізгі нұсқа нөмірі (X) сәйкес келмейтін өзгертулер енгізілген кезде көбейтілуі керек.

2.7 Деректерді сақтау және іріктеу
Түйінде бар деректерді сақтау әдістерін қарастырыңыз. Express веб-қаңқасы қаншалықты қуатты болса да, одан деректерді сақтай алмай-ақ, оның мағынасы аз. Әдетте деректер кейбір мәліметтер базасында сақталады. Бүгінгі таңда әртүрлі жағдайларға арналған мәліметтер базасының технологиялары бар-дәстүрлі SQL негізіндегі қоймалар, SQL қолданбай құжатқа бағытталған мәліметтер базасы, қарапайым кілттер мен мәндер қоймалары немесе YQL типті веб-сұрау қызметтері.

Node файлдық жүйеге оқуды және жазуды қоспағанда, деректерді сақтаудың қандай да бір жүйесіне кіріктірілген қолдауды қамтамасыз етпейді. Сақтау жүйелерімен, атап айтқанда мәліметтер базасымен жұмыс істеу үшін тиісті модульді пайдалану қажет. Node вики-сайтында CouchDB, MongoDB, MySQL, Postgresql, SQLite3, Memcache, REDIS, YQL және басқа жүйелермен жұмыс істеуге арналған осындай екі ондаған модуль бар. Қараңыз https://github.com/joyent/node/wiki/modules#database.

Жалпы жағдайда модульдің өзін де, оның тәуелділігін де, оның ішінде белгілі бір ДҚБЖ клиенттік кітапханаларының платформалық кодын да орнату қажет. Мысалы, MySQL-мен жұмыс істеу үшін модульдерге MySQL сервері және сәйкес клиенттік Кітапхана қажет.

SQL негізіндегі ДҚБЖ міндетті түрде ауыр сервер мен жоғары ақы төленетін дерекқор әкімшілерінің болуын білдірмейді. Sqlite3 орнатыңыз (http://www.sqlite.org/) өте қарапайым - бұл қосымшамен бірге құрастырылған дербес кітапхана, оған сервер де, орнату да қажет емес, бірақ SQL-мен толық жұмыс істеуді қамтамасыз етеді. Node-sqlite3 жобасында (https://github.com/developmentseed/node-sqlite3) sqlite3 және Node арасындағы интерфейс іске асырылды.

2.7.1 Mongoose-түйін мен MongoDB арасындағы интерфейс
MongoDB-жетекші "nosql" ДҚБЖ бірі (nosql оның SQL тіліне негізделмегенін білдіреді). Сипаттамада бұл "масштабталатын, өнімділігі жоғары, құжатқа бағытталған ашық бастапқы ДҚБЖ"делінген. Бұл құжаттарды JSON-ға жақын форматта қатаң белгіленген схемасыз сақтауға мүмкіндік береді және бірқатар озық мүмкіндіктерге ие. Қосымша мәліметтер мен құжаттаманы жобаның веб-сайтынан табуға болады http://www.mongodb.org/. - нысанды модельдеу құралы болып табылатын MongoDB-ге қол жеткізуге арналған бірнеше модульдердің бірі, яғни сіздің бағдарламаңыз деректерді сипаттайтын Schema нысандарын анықтайды, ал Mongoose оларды MongoDB-да сақтау туралы қамқорлық жасайды. Бұл ендірілген құжаттар, өрістерді терудің икемді жүйесі, өрістерді енгізуді басқару, виртуалды өрістер және т. б. сияқты құралдарға ие өте қуатты құрал. http://mongoosejs.com/.
Қорытынды
Қорытындылай келе, жасалған жүйенің интерфейсі оның функционалдығы мен пайдалану қарапайымдылығымен сәтті үйлесетінін атап өтуге болады. Қолданушының барынша ыңғайлы жұмысы үшін қолжетімді және түсінікті диалогтық терезелер әзірленді.

Интернет ортасында қауіпсіздікті қамтамасыз ету бірінші кезектегі міндет болғандықтан, Интернетте жұмыс істеген кезде электрондық бизнес операцияларының қауіпсіз орындалуын қамтамасыз ету үшін желіні қорғау шешімдерін әзірлеуді жалғастыруда. Интернет ортасында жұмыс істеген кезде жүйе деңгейінде де, қосымшалар деңгейінде де қорғаныс қамтамасыз етілуі керек. Құпия ақпаратты ішкі желі арқылы және әсіресе Интернет арқылы жылжыту қорғауды ұйымдастырудың маңызды шараларын қажет етеді. Атап айтқанда, деректерді Интернет арқылы беру кезінде оларды қорғау жөнінде шаралар қабылдау қажет.

Дипломдық жобаның мақсаты «Тоғызқұмалақ» бағдарламасын әзірлеу болатын. Бұл мақсатқа жету үшін диплом жобасы барысында келесі тапсырмалар шешілді: екіфакторлы аутентификация жүйесіне теориялық зерттеулер жүргізілді, ақпараттық қауіпсіздік тәуекелдері мен ақпараттық жүйені қамтамасыз ету міндеттерінің кешені талданды. Сонымен қатар, web сайт түсінігі және түрлері қарастырылды, web-сайттың типтік құрылымы және де заманауи бағдарламалық құралдарды пайдалана отырып, web-сайтты әзірлеу қарастырылды.

Дипломдық жоба барысында теориялық білімге сүйене отырып, Python программалау тілінде деректермен қауіпсіз алмасу жүйесі құрылды. Бұл жүйе қолданушылардың тез және ыңғайлы жұмыс істеуіне мүмкіндік береді. Бағдарламада нұсқаушының ақпаратты енгізе отырып, студент «Тоғызқұмалақ» ойынын ойнау жайлы ақпараттар ала алады және сол ақпараттар жүйемен қорғалады. Дайындалған бағдарламаның артықшылықтары атап көрсетілді:

  • функционалдық - бағдарлама көптеген функцияларды атқара алады, бұл өз кезегінде қолданушының сұранысын қамтамасыз ете алады;

  • ауқымдылық - бағдарламаны шексіз көп қолданушы қолдана алады;

  • қарапайым интерфейс - әзірленген автоматтандырылған жүйеде интерфейстің қарапайым және түсінікті формасы, оңай басқарылатын мәзір және мақсаттар мен міндеттерді шешуге арналған барлық қажетті құралдар жиынтығы бар.

  • қолжетімділік - сайтқа кез-келген интернетке қосылған құрылғы (компьютер, смартфон, планшет) арқылы кіруге болады.

Пайдаланылған әдебиеттер тізімі
1. Статья «Автоматизация бизнес-процессов: что это такое, этапы, цели и задачи, как автоматизировать предприятие» [Электронный ресурс]. URL: https://www.cleverence.ru/articles/auto-busines/avtomatizatsiya-biznes-protsessov- chto-eto-takoe-etapy-tseli-i-zadachi-kak-avtomatizirovat-predpriya/. (Дата обращения 05.05.2021).
2. Статья «Автоматизация бизнес-процесса обработки заявок от клиентов» [Электронный ресурс]. URL: https://www.comindware.com/ru/usecases/request-handling-business-process/. (Дата обращения 05.05.2021).
3. Статья «Информационные технологии в управлении организацией: роль, цель и общая характеристика управленческих ИТ» [Электронный ресурс]. URL: https://www.cleverence.ru/articles/auto-busines/informatsionnye- tekhnologii-v-upravlenii-organizatsiey-rol-tsel/. (Дата обращения 05.05.2021)
4. Статья «Разработка мобильных и веб-приложений: решения для Автоматизации Бизнес-Процессов» [Электронный ресурс]. URL: https://smartum.pro/ru/blog-ru/mobilnyye-i-veb-prilozheniya-dlya-avtomatizatsii- biznes-protsessov/. (Дата обращения 07.05.2021).
5. Статья «Выбор платформы и технологии для разработки мобильного приложения» [Электронный ресурс]. URL: https://integrator.digital/blog/mobile_ apps/razrabotka_mobilnogo_prilozheniya. (Дата обращения 07.05.2021).
6. Статья «Лучшие фреймворки для разработки кроссплатформенных мобильных приложений» [Электронный ресурс]. URL: https://blog.sibirix.ru/2020/08/25/crossplatform-frameworks/. (Дата обращения 10.05.2021).
7. Статья «Типы мобильных приложений» [Электронный ресурс]. URL: https://training.qatestlab.com/blog/technical-articles/types-of-mobile-applications/. (Дата обращения 10.05.2021). 321 p.
8. Nader Dabit. React Native in Action. Manning Publications Co., 2019. –
9. Frank Zammetti. Practical React Native: Build Two Full Projects and One Full Game Using React Native. – Apress, 2018. –342 p.
10. Eric Windmill. Flutter in Action. – Manning Publications Co, 2019. – 368
p.
11. Dan Hermes, Nima Mazloumi. Building Xamarin.Forms Mobile Apps
Using XAML: Mobile Cross-Platform XAML and Xamarin.Forms. – Apress Co, 2019. – 445 p.
12. Fu Cheng. Build Mobile Apps with Ionic 4 and Firebase: Hybrid Mobile App Development. – Apress, 2018. – 448 p.
13. Bruce Johnson. Visual Studio Code: End-To-End Editing and Debugging Tools for Web Developers. – John Wiley & Sons, 2019. –193 p.
14. Wexler Jonathan. Get Programming with Node.Js. – Pearson Education, 2018. – 350 p.
15. Шеннон Брэдшоу, Йон Брэзил, Кристина Ходоров MongoDB: полное руководство. Мощная и масштабируемая система управления базами данных / пер. с англ. Д. А. БеликоваМ.: ДМК Пресс, 2020. – 540 с.
16. Alex Giamas. Mastering MongoDB 4.x Second Edition. – Packt Publishing Ltd, 2019. – 384 p.

17. Использование мобильных устройств [Электронный ресурс]. – Режим доступа: http://www.wi-life.ru/stati/wi-fi/marketingovye-stati-2/mobiledevices-use-aruba-research-results (дата обращения: 15.05.2017).

18. Майер Р. Программирование приложений для планшетных компьютеров и смартфонов [Текст] / Р. Майер – Москва: Эксмо, 2013. – 816 с.

19. Мобильное приложение, что такое, определение, новости, статьи, видео [Электронный ресурс]. – Режим доступа: https://indicator.ru/tags/ mobilnoe-prilozhenie/ (дата обращения: 15.05.2017).

Қосымша А
% extends "base.html" %}

{% load static %}

{% load widget_tweaks %}

{% block title %}

Өңдеу "{{ course.title }}"

{% endblock %}

{% block content %}

Edit "{{ course.title }}"