{"id":282953,"date":"2016-12-23T16:30:04","date_gmt":"2016-12-23T13:30:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=282953"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=282953","title":{"rendered":"19 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u043e\u043a \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Node.js"},"content":{"rendered":"<p>\u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0437\u043d\u0430\u044e Node. \u0412\u043e\u0442 \u0443\u0436\u0435 \u0442\u0440\u0438 \u0433\u043e\u0434\u0430, \u043a\u0430\u043a \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u0439\u0442\u043e\u0432, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u0433\u043e. \u041d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u044f \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0435 \u0447\u0438\u0442\u0430\u043b.<\/p>\n<p>  \u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u043e\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u043c\u0435\u0442\u043e\u0434\u0430\u0445, \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u0442\u0438\u043f\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043e\u0431\u043e \u0432\u0441\u0451\u043c \u043f\u0440\u043e\u0447\u0435\u043c, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0422\u0430\u043a \u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432 \u0437\u043d\u0430\u043d\u0438\u044f\u0445. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0437\u0430\u043d\u044f\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043a Node.js, \u0430 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043f\u043e HTML, DOM, \u043f\u043e Web API, CSS, SVG \u0438 EcmaScript.<\/p>\n<p>  <a href=\"https:\/\/habrahabr.ru\/company\/ruvds\/blog\/318322\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e21\/fbf\/1f7\/e21fbf1f75aef5ebb3411d7df24a1bc3.jpg\" alt=\"image\" \/><\/div>\n<p><\/a><br \/>  \u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Node.js \u043e\u0442\u043a\u0440\u044b\u043b\u043e \u043c\u043d\u0435 \u043d\u0435\u043c\u0430\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u0437\u043d\u0430\u043b. \u0418\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435. \u041d\u0430\u0447\u043d\u0443 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u0422\u0430\u043a \u0436\u0435 \u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u044e, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043d\u043e\u0432\u043e\u043c\u0443 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c\u0443 \u0441\u0432\u043e\u0438 \u0433\u0430\u0434\u0436\u0435\u0442\u044b.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2><font color=\"#3AC1EF\">1. \u041c\u043e\u0434\u0443\u043b\u044c querystring \u043a\u0430\u043a \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440<\/font><\/h2>\n<p>  \u0421\u043a\u0430\u0436\u0435\u043c, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u043a\u0441\u0446\u0435\u043d\u0442\u0440\u0438\u0447\u043d\u043e\u0439 \u0411\u0414, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0434\u0430\u043b\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0430\u0440 \u043a\u043b\u044e\u0447\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<p>  <code>name:Sophie;shape:fox;condition:new<\/code>. \u0412\u043f\u043e\u043b\u043d\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 JavaScript. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0437\u0430\u0442\u0435\u043c \u2013 \u043c\u0430\u0441\u0441\u0438\u0432, \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u00ab<code>;<\/code>\u00bb. \u0414\u0430\u043b\u044c\u0448\u0435 \u2013 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043e\u043f\u044f\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u043f\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u00ab<code>:<\/code>\u00bb. \u0412 \u0438\u0442\u043e\u0433\u0435, \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u0435\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 \u2013 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  \u0412\u0441\u0451 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e?<\/p>\n<p>  \u041d\u0435\u0442, \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0412 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/nodejs.org\/api\/querystring.html#querystring_querystring_parse_str_sep_eq_options\"><code>querystring<\/code><\/a>.<\/p>\n<pre><code>const weirdoString = `name:Sophie;shape:fox;condition:new`; const result = querystring.parse(weirdoString, `;`, `:`); \/\/ \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \/\/ { \/\/ \u00a0\u00a0name: `Sophie`, \/\/ \u00a0\u00a0shape: `fox`, \/\/ \u00a0\u00a0condition: `new`, \/\/ };<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">2. \u041e\u0442\u043b\u0430\u0434\u043a\u0430: V8 Inspector<\/font><\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Node \u0441 \u043a\u043b\u044e\u0447\u043e\u043c <code>--inspect<\/code>, \u043e\u043d \u0441\u043e\u043e\u0431\u0449\u0438\u0442 URL. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0432 Chrome. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u2013 \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0441\u0442\u044c. \u041d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 <a href=\"https:\/\/nodejs.org\/api\/debugger.html#debugger_v8_inspector_integration_for_node_js\">\u043e\u0442\u043b\u0430\u0434\u043a\u0430 Node.js<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 Chrome. \u041d\u0430\u0441\u0442\u0430\u043b\u0438 \u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430. \u0412\u043e\u0442 <a href=\"https:\/\/medium.com\/@paul_irish\/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.evhku718w\">\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/a> \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u043e\u0442 \u041f\u043e\u043b\u0430 \u0410\u0439\u0440\u0438\u0448\u0430.<\/p>\n<p>  \u041d\u0430\u0434\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u043e\u0441\u0438\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439, \u043d\u043e \u044f \u0435\u0439 \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0438 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u043d\u0430 \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u0434\u0432\u043e\u0434\u0438\u043b\u0430.<\/p>\n<h2><font color=\"#3AC1EF\">3. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 nextTick \u0438 setImmediate<\/font><\/h2>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438, \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u0435\u0441\u043b\u0438 \u0434\u0430\u0442\u044c \u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f <a href=\"https:\/\/nodejs.org\/api\/process.html#process_process_nexttick_callback_args\"><code>process.nextTick()<\/code><\/a> \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f <code>process.sendThisToTheStartOfTheQueue()<\/code>. \u0410 <a href=\"https:\/\/nodejs.org\/api\/timers.html#timers_setimmediate_callback_args\"><code>setImmediate()<\/code><\/a> &#8212;<code> sendThisToTheEndOfTheQueue()<\/code>.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0432\u043e\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043e\u0431 <a href=\"https:\/\/nodejs.org\/en\/blog\/release\/v0.10.0\/#faster-process-nexttick\">\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a> <code>nextTick<\/code> \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Node v0.10.0. \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435. \u042f \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0432 React <code>props<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f <code>stuffThatShouldStayTheSameIfTheUserRefreshes<\/code>, \u0430 <code>state<\/code> \u2013 <code>stuffThatShouldBeForgottenIfTheUserRefreshes<\/code>. \u0422\u043e, \u0447\u0442\u043e \u0443 \u044d\u0442\u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f \u0434\u043b\u0438\u043d\u0430, \u0441\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0443\u0434\u0430\u0447\u043d\u044b\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u043c.<\/p>\n<h2><font color=\"#3AC1EF\">4. Server.listen \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/font><\/h2>\n<p>  \u042f \u043f\u0440\u0438\u0432\u0435\u0440\u0436\u0435\u043d\u0435\u0446 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u00aboptions\u00bb, \u0430 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u0443\u0447\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0438\u043c\u0451\u043d, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 <a href=\"https:\/\/nodejs.org\/api\/net.html#net_net_createserver_options_connectionlistener\">\u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/a> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<pre><code>require(`http`)  \u00a0.createServer()  \u00a0.listen({  \u00a0\u00a0\u00a0port: 8080,  \u00a0\u00a0\u00a0host: `localhost`,  \u00a0})  \u00a0.on(`request`, (req, res) =&gt; {  \u00a0\u00a0\u00a0res.end(`Hello World!`);  \u00a0});<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0441\u043f\u0440\u044f\u0442\u0430\u043b\u0430\u0441\u044c. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e <a href=\"https:\/\/nodejs.org\/api\/http.html#http_class_http_server\"><code>http.Server<\/code><\/a> \u043e \u043d\u0435\u0439 \u2013 \u043d\u0438 \u0441\u043b\u043e\u0432\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 <a href=\"https:\/\/nodejs.org\/api\/net.html#net_server_listen_options_callback\"><code>net.Server<\/code><\/a>, \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>http.Server<\/code>.<\/p>\n<h2><font color=\"#3AC1EF\">5. \u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0430\u043c<\/font><\/h2>\n<p>  \u041f\u0443\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u043c\u043e\u0434\u0443\u043b\u044e <a href=\"https:\/\/nodejs.org\/api\/fs.html#fs_file_system\"><code>fs<\/code><\/a>, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u0422\u043e\u0447\u043a\u0430 \u043e\u0442\u0441\u0447\u0451\u0442\u0430 \u2013 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0430\u044f <code>process.cwd()<\/code>. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u0438 \u0442\u0430\u043a \u0432\u0441\u0435 \u0437\u043d\u0430\u044e\u0442, \u043d\u043e \u0432\u043e\u0442 \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u0435\u0437 \u043f\u043e\u043b\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c.<\/p>\n<pre><code>const fs = require(`fs`); const path = require(`path`); \/\/ \u043f\u043e\u0447\u0435\u043c\u0443 \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u043b \u0442\u0430\u043a... fs.readFile(path.join(__dirname, `myFile.txt`), (err, data) =&gt; {  \u00a0\/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 }); \/\/ \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0433 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0442\u0430\u043a? fs.readFile(`.\/path\/to\/myFile.txt`, (err, data) =&gt; {  \u00a0\/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 });<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">6. \u0420\u0430\u0437\u0431\u043e\u0440 \u043f\u0443\u0442\u0435\u0439 \u043a \u0444\u0430\u0439\u043b\u0430\u043c<\/font><\/h2>\n<p>  \u041e\u0431\u044b\u0447\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0438\u0437 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0443 \u0435\u0433\u043e \u0438\u043c\u044f \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c <a href=\"https:\/\/nodejs.org\/api\/path.html#path_path_parse_path\">\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438<\/a>.<\/p>\n<pre><code>myFilePath = `\/someDir\/someFile.json`; path.parse(myFilePath).base === `someFile.json`; \/\/ true path.parse(myFilePath).name === `someFile`; \/\/ true path.parse(myFilePath).ext === `.json`; \/\/ true<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">7. \u0420\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0430 \u043b\u043e\u0433\u043e\u0432 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/font><\/h2>\n<p>  \u0421\u0434\u0435\u043b\u0430\u044e \u0432\u0438\u0434, \u0431\u0443\u0434\u0442\u043e \u044f \u043d\u0435 \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>console.dir(obj, {colors: true})<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 <a href=\"https:\/\/nodejs.org\/api\/console.html#console_console_dir_obj_options\">\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/a> \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u043e\u043c. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u043e\u0432.<\/p>\n<h2><font color=\"#3AC1EF\">8. \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 setInterval()<\/font><\/h2>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 <code>setInterval()<\/code> \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437 \u0432 \u0434\u0435\u043d\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0446\u0438\u043a\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u0439 Node \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043a\u043e\u0434, \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>setInterval()<\/code>. \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u0430\u0442\u044c Node \u043e\u0442\u0434\u043e\u0445\u043d\u0443\u0442\u044c (\u043d\u0435 \u0437\u043d\u0430\u044e, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043a\u0430\u043a\u0438\u0435 \u043f\u043b\u044e\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c), \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <a href=\"https:\/\/nodejs.org\/api\/timers.html#timers_timeout_unref\"><code>unref()<\/code><\/a>.<\/p>\n<pre><code>const dailyCleanup = setInterval(() =&gt; {  \u00a0cleanup(); }, 1000 * 60 * 60 * 24); dailyCleanup.unref();<\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0442\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 Node \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u0437\u0430\u043d\u044f\u0442 (\u0441\u043a\u0430\u0436\u0435\u043c, \u043d\u0435\u0442 http-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439), \u043e\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<h2><font color=\"#3AC1EF\">9. \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/font><\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0443\u0431\u0438\u0432\u0430\u0442\u044c, \u0442\u043e \u0432\u044b, \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u0443\u0436\u0435 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u043b\u0438:<\/p>\n<pre><code>process.kill(process.pid, `SIGTERM`);<\/code><\/pre>\n<p>  \u041d\u0438\u0447\u0435\u0433\u043e \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043e\u0431 \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443. \u041d\u043e \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432\u043a\u0440\u0430\u043b\u0430\u0441\u044c \u043e\u0448\u0438\u0431\u043a\u0430, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u043e\u0439? \u0412 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0437\u0434\u0435\u0441\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0438\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0446\u0435\u043b\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0443\u0442 \u043d\u0435\u043c\u0443\u0434\u0440\u0435\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435 \u0442\u043e. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code>process.kill(process.pid, os.constants.signals.SIGTERM);<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">10. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432<\/font><\/h2>\n<p>  \u0412 Node.js \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f <a href=\"https:\/\/nodejs.org\/api\/net.html#net_net_isip_input\">\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432<\/a>. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u043d\u0435 \u0440\u0430\u0437 \u043f\u0438\u0441\u0430\u043b \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0443\u043c\u0430 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e:<\/p>\n<pre><code>require(`net`).isIP(`10.0.0.1`)<\/code><\/pre>\n<p>  \u0432\u0435\u0440\u043d\u0451\u0442 <code>4<\/code>.<\/p>\n<pre><code>require(`net`).isIP(`cats`)<\/code><\/pre>\n<p>  \u0432\u0435\u0440\u043d\u0451\u0442 <code>0<\/code>.<\/p>\n<p>  \u0412\u0441\u0451 \u0432\u0435\u0440\u043d\u043e, \u043a\u043e\u0442\u044b \u2013 \u044d\u0442\u043e \u043d\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438. \u041c\u043d\u0435 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u043d\u043e \u044f \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e, \u0447\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u044e \u043d\u0443\u0436\u043d\u044b\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0445\u043e\u0442\u044f \u0438 \u0441\u0430\u043c \u0442\u043e\u043b\u043a\u043e\u043c \u043d\u0435 \u0437\u043d\u0430\u044e \u2013 \u0437\u0430\u0447\u0435\u043c. \u0412 \u043e\u0431\u0449\u0435\u043c \u2013 \u044d\u0442\u043e \u043c\u043e\u0439 \u0441\u0442\u0438\u043b\u044c.<\/p>\n<h2><font color=\"#3AC1EF\">11. \u0421\u0438\u043c\u0432\u043e\u043b \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, os.EOL<\/font><\/h2>\n<p>  \u0412\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0438\u043c\u0432\u043e\u043b \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438? \u0414\u0430? \u0412\u0441\u0451, \u0442\u0443\u0448\u0438\u0442\u0435 \u0441\u0432\u0435\u0442. \u0412\u043e\u0442, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u043b, \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430: <a href=\"https:\/\/nodejs.org\/api\/os.html#os_os_eol\"><code>os.EOL<\/code><\/a>. \u0412 Windows \u044d\u0442\u043e \u0434\u0430\u0441\u0442 <code>\\r\\n<\/code>, \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u041e\u0421 \u2014 <code>\\n<\/code>. <a href=\"https:\/\/github.com\/sasstools\/sass-lint\/pull\/92\/files\"><code>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 os.EOL<\/code><\/a> \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<\/p>\n<p>  \u0422\u0443\u0442 \u044f \u0441\u0434\u0435\u043b\u0430\u044e \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0443\u0433\u043b\u0443\u0431\u0438\u043b\u0441\u044f. \u0427\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u043c\u043d\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>os.EOL<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u044f\u043c. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0432 \u043d\u0435\u043a\u043e\u0435\u043c \u0444\u0430\u0439\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 CRLF(<code>\\r\\n<\/code>), \u0438\u043b\u0438 LF (<code>\\n<\/code>), \u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u0432 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u043e\u0442 <a href=\"http:\/\/eslint.org\/docs\/rules\/linebreak-style\">\u043f\u0440\u0430\u0432\u0438\u043b\u043e eslint<\/a>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u043e\u0442\u0447\u0430\u0441\u0442\u0438, \u043c\u043e\u0436\u0435\u0442 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0447\u044c. \u041f\u0440\u0430\u0432\u0434\u0430, \u043e\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u0441 \u0442\u0435\u043a\u0441\u0442\u0430\u043c\u0438 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Git.<\/p>\n<p>  \u0418, \u0432\u0441\u0451 \u0436\u0435, <code>os.EOL<\/code> \u2013 \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0438\u0433\u0440\u0443\u0448\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043a\u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043b\u043e\u0433-\u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u041e\u0421. \u0412 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>os.EOL<\/code> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0411\u043b\u043e\u043a\u043d\u043e\u0442 \u0432 Windows Server.<\/p>\n<pre><code>const fs = require(`fs`); \/\/ \u0436\u0451\u0441\u0442\u043a\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 CRLF fs.readFile(`.\/myFile.txt`, `utf8`, (err, data) =&gt; {  \u00a0data.split(`\\r\\n`).forEach(line =&gt; {  \u00a0\u00a0\u00a0\/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435  \u00a0}); }); \/\/ \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u041e\u0421 const os = require(`os`); fs.readFile(`.\/myFile.txt`, `utf8`, (err, data) =&gt; {  \u00a0data.split(os.EOL).forEach(line =&gt; {  \u00a0\u00a0\u00a0\/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435  \u00a0}); });<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">12. \u041a\u043e\u0434\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f HTTP<\/font><\/h2>\n<p>  \u0412 Node \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u00ab\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u00bb \u0441 \u043a\u043e\u0434\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f HTTP \u0438 \u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438. \u042f \u0433\u043e\u0432\u043e\u0440\u044e \u043e\u0431 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <a href=\"https:\/\/nodejs.org\/api\/http.html#http_http_status_codes\"><code>http.STATUS_CODE<\/code><\/a>. \u0415\u0433\u043e \u043a\u043b\u044e\u0447\u0438 \u2013 \u044d\u0442\u043e \u043a\u043e\u0434\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2013 \u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5ce\/5ec\/73b\/5ce5ec73b2f2a0a947e7210fb9b114ef.png\" \/><\/div>\n<p>  <i><font color=\"#999999\">\u041e\u0431\u044a\u0435\u043a\u0442 http.STATUS_CODE<\/font><\/i><\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f:<\/p>\n<pre><code>someResponse.code === 301; \/\/ true require(`http`).STATUS_CODES[someResponse.code] === `Moved Permanently`; \/\/ true<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">13. \u041f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/font><\/h2>\n<p>  \u041c\u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043c\u0430\u043b\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u0434, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043d\u0438\u0436\u0435, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<pre><code>const jsonData = getDataFromSomeApi(); \/\/ \u0422\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u044d\u0442\u043e! \u041d\u0435\u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435! const data = JSON.parse(jsonData); \/\/ \u0413\u0440\u043e\u043c\u043a\u0438\u0439 \u0441\u0442\u0443\u043a \u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0433\u043b\u0443\u043f\u043e\u0441\u0442\u0438, \u043f\u0440\u044f\u043c\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f Node.js \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0432\u044b\u0432\u043e\u0434\u044f\u0449\u0443\u044e <a href=\"https:\/\/nodejs.org\/api\/process.html#process_event_uncaughtexception\">\u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/a> \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c:<\/p>\n<pre><code>process.on(`uncaughtException`, console.error);<\/code><\/pre>\n<p>  \u042f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0445\u043e\u0436\u0443\u0441\u044c \u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u043c \u0443\u043c\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c <a href=\"http:\/\/pm2.keymetrics.io\/\">PM2<\/a> \u0438 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e, \u0432 \u0431\u043b\u043e\u043a\u0438 <code>try\u2026catch<\/code>, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e \u043d\u0430 \u0437\u0430\u043a\u0430\u0437, \u043d\u043e \u0432\u043e\u0442 \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445\u2026<\/p>\n<p>  \u0425\u043e\u0447\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0438\u043a\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u00ab<a href=\"https:\/\/nodejs.org\/api\/process.html#process_warning_using_uncaughtexception_correctly\">\u043b\u0443\u0447\u0448\u0438\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/a>\u00bb, \u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0438\u0434\u0435\u044f \u043f\u043b\u043e\u0445\u0430\u044f. \u0420\u0435\u0448\u0430\u0439\u0442\u0435 \u0441\u0430\u043c\u0438, \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043b\u0438 \u043f\u043e\u0441\u0442\u0443 \u0432 \u0431\u043b\u043e\u0433\u0435, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0447\u0443\u0432\u0430\u043a\u043e\u043c, \u0438\u043b\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<h2><font color=\"#3AC1EF\">14. \u041f\u0430\u0440\u0430 \u0441\u043b\u043e\u0432 \u043e\u0431 once()<\/font><\/h2>\n<p>  \u0412 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 <code>on()<\/code>, \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <code>EventEmitter<\/code> \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0438 \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/nodejs.org\/api\/events.html#events_emitter_once_eventname_listener\"><code>code<\/code><\/a>. \u042f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044f \u2013 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u043d\u0430 \u0417\u0435\u043c\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c \u0443\u0437\u043d\u0430\u043b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435 \u0438 \u0442\u0430\u043a \u043f\u043e\u0439\u043c\u0443\u0442.<\/p>\n<pre><code>server.once(`request`, (req, res) =&gt; res.end(`No more from me.`));<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">15. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/font><\/h2>\n<p>  <a href=\"https:\/\/nodejs.org\/api\/console.html#console_new_console_stdout_stderr\">\u041a\u043e\u043d\u0441\u043e\u043b\u044c<\/a> \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0438\u0436\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0435\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432\u044b\u0432\u043e\u0434\u0430:<\/p>\n<pre><code>new console.Console(standardOut, errorOut)<\/code><\/pre>\n<p>  \u0417\u0430\u0447\u0435\u043c? \u041d\u0435 \u0437\u043d\u0430\u044e \u0442\u043e\u0447\u043d\u043e. \u041c\u043e\u0436\u0435\u0442, \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b, \u0438\u043b\u0438 \u0432 \u0441\u043e\u043a\u0435\u0442, \u0438\u043b\u0438 \u0435\u0449\u0451 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c.<\/p>\n<h2><font color=\"#3AC1EF\">16. DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/font><\/h2>\n<p>  \u041c\u043d\u0435 \u0442\u0443\u0442 \u043e\u0434\u043d\u0430 \u043f\u0442\u0438\u0447\u043a\u0430 \u043d\u0430\u0441\u0432\u0438\u0441\u0442\u0435\u043b\u0430, \u0447\u0442\u043e Node <a href=\"https:\/\/github.com\/nodejs\/node\/issues\/5893\">\u043d\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442<\/a> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a DNS. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0435\u0441\u044c \u043a \u043d\u0435\u043a\u043e\u0435\u043c\u0443 URL, \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c, \u0442\u0440\u0430\u0442\u044f\u0442\u0441\u044f \u0431\u0435\u0441\u0446\u0435\u043d\u043d\u044b\u0435 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0412 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a DNS \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/nodejs.org\/api\/dns.html#dns_dns_lookup_hostname_options_callback\"><code>dns.lookup()<\/code><\/a>, \u0438 \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0418\u043b\u0438 \u2013 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u043c <a href=\"https:\/\/www.npmjs.com\/package\/dnscache\">dnscache<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435.<\/p>\n<pre><code>dns.lookup(`www.myApi.com`, 4, (err, address) =&gt; {  \u00a0cacheThisForLater(address); });<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">17. \u041c\u043e\u0434\u0443\u043b\u044c fs: \u043c\u0438\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435<\/font><\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u0448 \u0441\u0442\u0438\u043b\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043c\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c, \u044d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435: \u00ab\u043f\u0440\u043e\u0447\u0442\u0443 \u043f\u043e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u043a\u0443\u0441\u043e\u043a \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u0431\u0443\u0434\u0443 \u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u00bb, \u0442\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u044b \u043e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 <a href=\"https:\/\/nodejs.org\/api\/fs.html\"><code>\u043c\u043e\u0434\u0443\u043b\u0435\u043c fs<\/code><\/a>. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u043d\u0430 \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f Node \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u041e\u0421, \u043d\u043e \u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0431\u0435\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u044e\u0442 \u0433\u043b\u0430\u0434\u044c \u043e\u043a\u0435\u0430\u043d\u0430 \u043a\u043e\u0434\u0430 \u043a\u0430\u043a \u043e\u0441\u0442\u0440\u044b\u0435 \u0440\u0438\u0444\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0451 \u0438 \u0437\u0430\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0410 \u0432\u044b \u0432 \u044d\u0442\u043e\u0439 \u0434\u0440\u0430\u043c\u0435 \u0438\u0433\u0440\u0430\u0435\u0442\u0435 \u0440\u043e\u043b\u044c \u043b\u043e\u0434\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0438\u0444\u043e\u0432 \u0441\u0435\u0441\u0442\u044c.<\/p>\n<p>  \u041a \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043a <code>fs<\/code>, \u043d\u0435 \u0441\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043a \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c\u0443: \u00abWindows \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043c\u0430\u0445\u043d\u0443\u0442\u044c\u0441\u044f, \u043f\u0440\u0438\u043a\u0440\u044b\u0432\u0448\u0438\u0441\u044c \u0438\u0434\u0435\u0435\u0439: \u00ab\u0434\u0430 \u043a\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Windows\u00bb. (\u042f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0443\u0442 \u0446\u0435\u043b\u0443\u044e \u0440\u0435\u0447\u044c \u043e\u0431 \u0430\u043d\u0442\u0438-Windows \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f\u0445 \u0432 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u043d\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u0440\u0435\u0448\u0438\u043b \u044d\u0442\u043e \u0443\u0431\u0440\u0430\u0442\u044c, \u0430 \u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0433\u043b\u0430\u0437\u0430 \u043d\u0430 \u043b\u043e\u0431 \u043f\u043e\u043b\u0435\u0437\u043b\u0438 \u043e\u0442 \u044d\u0442\u043e\u0439 \u043c\u043e\u0435\u0439 \u043f\u0440\u043e\u043f\u043e\u0432\u0435\u0434\u0438).<\/p>\n<p>  \u0412\u043e\u0442, \u0432\u043a\u0440\u0430\u0442\u0446\u0435, \u0442\u043e, \u0447\u0442\u043e \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u043c\u043e\u0434\u0443\u043b\u044e <code>fs<\/code>. \u0423\u0432\u0435\u0440\u0435\u043d, \u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u0442\u0438 \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043a\u043b\u044e\u043d\u0443\u0442\u044c \u043d\u0435 \u0445\u0443\u0436\u0435 \u0436\u0430\u0440\u0435\u043d\u043e\u0433\u043e \u043f\u0435\u0442\u0443\u0445\u0430.<\/p>\n<ul>\n<li>\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>mode<\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e <code>fs.stats(), <\/code> \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0432 Windows \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u041e\u0421. \u0412 Windows \u043e\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c \u0440\u0435\u0436\u0438\u043c\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0444\u0430\u0439\u043b\u0430\u043c, \u0442\u0430\u043a\u0438\u043c, \u043a\u0430\u043a <code>fs.constants.S_IRWXU<\/code>.\n<\/li>\n<li>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>fs.lchmod()<\/code> \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 macOS.  <\/li>\n<li>\u0412\u044b\u0437\u043e\u0432 <code>fs.symlink()<\/code> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c <code>type<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 Windows.\n<\/li>\n<li>\u041e\u043f\u0446\u0438\u044f <code>recursive<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>fs.watch()<\/code>, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Windows \u0438 macOS.\n<\/li>\n<li>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>fs.watch()<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 Linux \u0438 Windows.\n<\/li>\n<li>\u0412\u044b\u0437\u043e\u0432 <code>fs.open()<\/code> \u0441 \u0444\u043b\u0430\u0433\u043e\u043c <code>a+<\/code> \u0434\u043b\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u043e FreeBSD \u0438 \u0432 Windows, \u043d\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 macOS \u0438 Linux.  <\/li>\n<li>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>position<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 <code>fs.write()<\/code>, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 Linux \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043e\u0442\u043a\u0440\u044b\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u042f\u0434\u0440\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a \u043a\u043e\u043d\u0446\u0443 \u0444\u0430\u0439\u043b\u0430.<\/li>\n<\/ul>\n<p>  (\u042f \u0442\u0443\u0442 \u043d\u0435 \u043e\u0442\u0441\u0442\u0430\u044e \u043e\u0442 \u043c\u043e\u0434\u044b, \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u041e\u0421 \u043e\u0442 Apple \u00abmacOS\u00bb, \u0445\u043e\u0442\u044f \u0435\u0449\u0451 \u0438 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0442\u0430\u0440\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, OS X, \u043e\u0442\u043e\u0448\u043b\u043e \u0432 \u043c\u0438\u0440 \u0438\u043d\u043e\u0439).<\/p>\n<h2><font color=\"#3AC1EF\">18. \u041c\u043e\u0434\u0443\u043b\u044c net \u0432\u0434\u0432\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043c\u043e\u0434\u0443\u043b\u044f http<\/font><\/h2>\n<p>  \u0427\u0438\u0442\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043a Node.js, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c <a href=\"https:\/\/nodejs.org\/api\/net.html\"><code>net<\/code><\/a> \u2013 \u044d\u0442\u043e \u0432\u0435\u0449\u044c. \u041e\u043d \u043b\u0435\u0436\u0438\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u043e\u0434\u0443\u043b\u044f <code>http<\/code>. \u042d\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u043e \u043c\u0435\u043d\u044f \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 (\u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043c\u043d\u0435 \u044d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c), \u0441\u0442\u043e\u0438\u0442 \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0434\u0443\u043b\u044c <code>net<\/code>?<\/p>\n<p>  \u0422\u0435, \u043a\u0442\u043e \u043f\u043b\u043e\u0442\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c, \u043c\u043e\u0433\u0443\u0442 \u0438 \u043d\u0435 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c, \u043d\u043e \u044f \u2013 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0434\u0440\u0443\u0433 \u0441\u0432\u0430\u043b\u0438\u043b\u0441\u044f \u0432 \u043c\u0438\u0440 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u0437\u043d\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e HTTP \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435. \u0412\u0441\u0435 \u044d\u0442\u0438 TCP, \u0441\u043e\u043a\u0435\u0442\u044b, \u0432\u0441\u044f \u044d\u0442\u0430 \u0431\u043e\u043b\u0442\u043e\u0432\u043d\u044f \u043e \u043f\u043e\u0442\u043e\u043a\u0430\u0445\u2026 \u0414\u043b\u044f \u043c\u0435\u043d\u044f \u044d\u0442\u043e \u043a\u0430\u043a <a href=\"https:\/\/www.youtube.com\/watch?v=FQgH4G3qypI\">\u044f\u043f\u043e\u043d\u0441\u043a\u0438\u0439 \u0440\u044d\u043f<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u043d\u0435 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0438 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043d\u043e \u0437\u0432\u0443\u0447\u0438\u0442 \u0438\u043d\u0442\u0440\u0438\u0433\u0443\u044e\u0449\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u043e \u0432\u0441\u0451\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 <code>net<\/code> \u0438 <code>http<\/code>, \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438\u0445, \u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043f\u0430\u0440\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 (\u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043b\u0443\u0448\u0430\u0435\u0442\u0435 \u044f\u043f\u043e\u043d\u0441\u043a\u0438\u0439 \u0440\u044d\u043f) \u0438 \u043d\u0430\u0433\u0440\u0443\u0437\u0438\u043b \u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 <a href=\"https:\/\/nodejs.org\/api\/http.html#http_class_http_server\"><code>http.Server<\/code><\/a> \u0441\u043c\u043e\u0433 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 3400 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0430 <a href=\"https:\/\/nodejs.org\/api\/net.html#net_class_net_server\"><code>net.Server<\/code><\/a> \u2013 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 5500. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, <code>net.Server<\/code> \u043f\u0440\u043e\u0449\u0435 \u0443\u0441\u0442\u0440\u043e\u0435\u043d.<\/p>\n<p>  \u0412\u043e\u0442, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u043e\u0434 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2013 \u043f\u0440\u0438\u043c\u0438\u0442\u0435 \u0438\u0437\u0432\u0438\u043d\u0435\u043d\u0438\u044f \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0442\u0430\u043a \u0434\u043e\u043b\u0433\u043e \u043f\u0440\u043e\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u043e\u0434 <a href=\"https:\/\/gist.github.com\/davidgilbertson\/8c38f7604eb95cec2836be68217e643b#file-client-js\">client.js<\/a>.<\/p>\n<pre><code>\/\/ \u0417\u0434\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u043e \u2013 \u043a TCP-\u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u0434\u0440\u0443\u0433\u043e\u0435 \u2013 \u043a HTTP (\u043e\u0431\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0444\u0430\u0439\u043b\u0435 server.js). \/\/ \u041a\u043b\u0438\u0435\u043d\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c \u0438 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442 \u043e\u0442\u0432\u0435\u0442\u044b. \/\/ \u0418 \u0442\u043e\u0442 \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.  const net = require(`net`); const http = require(`http`);  function parseIncomingMessage(res) {  \u00a0return new Promise((resolve) =&gt; {  \u00a0\u00a0\u00a0let data = ``;   \u00a0\u00a0\u00a0res.on(`data`, (chunk) =&gt; {  \u00a0\u00a0\u00a0\u00a0\u00a0data += chunk;  \u00a0\u00a0\u00a0});   \u00a0\u00a0\u00a0res.on(`end`, () =&gt; resolve(data));  \u00a0}); }  const testLimit = 5000;   \/* \u00a0------------------ \u00a0*\/ \/* \u00a0-- \u00a0NET client \u00a0-- \u00a0*\/ \/* \u00a0------------------ \u00a0*\/ function testNetClient() {  \u00a0const netTest = {  \u00a0\u00a0\u00a0startTime: process.hrtime(),  \u00a0\u00a0\u00a0responseCount: 0,  \u00a0\u00a0\u00a0testCount: 0,  \u00a0\u00a0\u00a0payloadData: {  \u00a0\u00a0\u00a0\u00a0\u00a0type: `millipede`,  \u00a0\u00a0\u00a0\u00a0\u00a0feet: 100,  \u00a0\u00a0\u00a0\u00a0\u00a0test: 0,  \u00a0\u00a0\u00a0},  \u00a0};   \u00a0function handleSocketConnect() {  \u00a0\u00a0\u00a0netTest.payloadData.test++;  \u00a0\u00a0\u00a0netTest.payloadData.feet++;   \u00a0\u00a0\u00a0const payload = JSON.stringify(netTest.payloadData);   \u00a0\u00a0\u00a0this.end(payload, `utf8`);  \u00a0}   \u00a0function handleSocketData() {  \u00a0\u00a0\u00a0netTest.responseCount++;   \u00a0\u00a0\u00a0if (netTest.responseCount === testLimit) {  \u00a0\u00a0\u00a0\u00a0\u00a0const hrDiff = process.hrtime(netTest.startTime);  \u00a0\u00a0\u00a0\u00a0\u00a0const elapsedTime = hrDiff[0] * 1e3 + hrDiff[1] \/ 1e6;  \u00a0\u00a0\u00a0\u00a0\u00a0const requestsPerSecond = (testLimit \/ (elapsedTime \/ 1000)).toLocaleString();   \u00a0\u00a0\u00a0\u00a0\u00a0console.info(`net.Server handled an average of ${requestsPerSecond} requests per second.`);  \u00a0\u00a0\u00a0}  \u00a0}   \u00a0while (netTest.testCount &lt; testLimit) {  \u00a0\u00a0\u00a0netTest.testCount++;  \u00a0\u00a0\u00a0const socket = net.connect(8888, handleSocketConnect);  \u00a0\u00a0\u00a0socket.on(`data`, handleSocketData);  \u00a0} }   \/* \u00a0------------------- \u00a0*\/ \/* \u00a0-- \u00a0HTTP client \u00a0-- \u00a0*\/ \/* \u00a0------------------- \u00a0*\/ function testHttpClient() {  \u00a0const httpTest = {  \u00a0\u00a0\u00a0startTime: process.hrtime(),  \u00a0\u00a0\u00a0responseCount: 0,  \u00a0\u00a0\u00a0testCount: 0,  \u00a0};   \u00a0const payloadData = {  \u00a0\u00a0\u00a0type: `centipede`,  \u00a0\u00a0\u00a0feet: 100,  \u00a0\u00a0\u00a0test: 0,  \u00a0};   \u00a0const options = {  \u00a0\u00a0\u00a0hostname: `localhost`,  \u00a0\u00a0\u00a0port: 8080,  \u00a0\u00a0\u00a0method: `POST`,  \u00a0\u00a0\u00a0headers: {  \u00a0\u00a0\u00a0\u00a0\u00a0'Content-Type': `application\/x-www-form-urlencoded`,  \u00a0\u00a0\u00a0},  \u00a0};   \u00a0function handleResponse(res) {  \u00a0\u00a0\u00a0parseIncomingMessage(res).then(() =&gt; {  \u00a0\u00a0\u00a0\u00a0\u00a0httpTest.responseCount++;   \u00a0\u00a0\u00a0\u00a0\u00a0if (httpTest.responseCount === testLimit) {  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const hrDiff = process.hrtime(httpTest.startTime);  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const elapsedTime = hrDiff[0] * 1e3 + hrDiff[1] \/ 1e6;  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0const requestsPerSecond = (testLimit \/ (elapsedTime \/ 1000)).toLocaleString();   \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.info(`http.Server handled an average of ${requestsPerSecond} requests per second.`);  \u00a0\u00a0\u00a0\u00a0\u00a0}  \u00a0\u00a0\u00a0});  \u00a0}   \u00a0while (httpTest.testCount &lt; testLimit) {  \u00a0\u00a0\u00a0httpTest.testCount++;  \u00a0\u00a0\u00a0payloadData.test = httpTest.testCount;  \u00a0\u00a0\u00a0payloadData.feet++;   \u00a0\u00a0\u00a0const payload = JSON.stringify(payloadData);   \u00a0\u00a0\u00a0options[`Content-Length`] = Buffer.byteLength(payload);   \u00a0\u00a0\u00a0const req = http.request(options, handleResponse);  \u00a0\u00a0\u00a0req.end(payload);  \u00a0} }  \/* \u00a0-- \u00a0Start tests \u00a0-- \u00a0*\/ \/\/ flip these occasionally to ensure there's no bias based on order setTimeout(() =&gt; {  \u00a0console.info(`Starting testNetClient()`);  \u00a0testNetClient(); }, 50);  setTimeout(() =&gt; {  \u00a0console.info(`Starting testHttpClient()`);  \u00a0testHttpClient(); }, 2000);<\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u2013 <a href=\"https:\/\/gist.github.com\/davidgilbertson\/8c38f7604eb95cec2836be68217e643b#file-server-js\">server.js<\/a>.<\/p>\n<pre><code>\/\/ \u0417\u0434\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0434\u0432\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041e\u0434\u0438\u043d \u2013 TCP, \u0432\u0442\u043e\u0440\u043e\u0439 \u2013 HTTP. \/\/ \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 JSON, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0441 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0435\u0451 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441.  const net = require(`net`); const http = require(`http`);  function renderAnimalString(jsonString) {  \u00a0const data = JSON.parse(jsonString);  \u00a0return `${data.test}: your are a ${data.type} and you have ${data.feet} feet.`; }   \/* \u00a0------------------ \u00a0*\/ \/* \u00a0-- \u00a0NET server \u00a0-- \u00a0*\/ \/* \u00a0------------------ \u00a0*\/  net  \u00a0.createServer((socket) =&gt; {  \u00a0\u00a0\u00a0socket.on(`data`, (jsonString) =&gt; {  \u00a0\u00a0\u00a0\u00a0\u00a0socket.end(renderAnimalString(jsonString));  \u00a0\u00a0\u00a0});  \u00a0})  \u00a0.listen(8888);   \/* \u00a0------------------- \u00a0*\/ \/* \u00a0-- \u00a0HTTP server \u00a0-- \u00a0*\/ \/* \u00a0------------------- \u00a0*\/  function parseIncomingMessage(res) {  \u00a0return new Promise((resolve) =&gt; {  \u00a0\u00a0\u00a0let data = ``;   \u00a0\u00a0\u00a0res.on(`data`, (chunk) =&gt; {  \u00a0\u00a0\u00a0\u00a0\u00a0data += chunk;  \u00a0\u00a0\u00a0});   \u00a0\u00a0\u00a0res.on(`end`, () =&gt; resolve(data));  \u00a0}); }  http  \u00a0.createServer()  \u00a0.listen(8080)  \u00a0.on(`request`, (req, res) =&gt; {  \u00a0\u00a0\u00a0parseIncomingMessage(req).then((jsonString) =&gt; {  \u00a0\u00a0\u00a0\u00a0\u00a0res.end(renderAnimalString(jsonString));  \u00a0\u00a0\u00a0});  \u00a0});<\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">19. \u0425\u0438\u0442\u0440\u043e\u0441\u0442\u0438 \u0440\u0435\u0436\u0438\u043c\u0430 REPL<\/font><\/h2>\n<p>  <\/p>\n<ol>\n<li>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 <a href=\"https:\/\/nodejs.org\/api\/repl.html\">REPL<\/a>, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 <code>node<\/code> \u0438 \u043d\u0430\u0436\u0430\u043b\u0438 \u043d\u0430 <b>Enter<\/b>, \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432\u0440\u043e\u0434\u0435 <code>.load someFile.js<\/code> \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u043a\u0443\u0447\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442).\n<\/li>\n<li>\u0412 \u044d\u0442\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f <code>NODE_REPL_HISTORY=&quot;&quot;<\/code> \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0432 \u0444\u0430\u0439\u043b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u0443\u0437\u043d\u0430\u043b (\u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u2013 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b), \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u0438\u0441\u0442\u043e\u0440\u0438\u0438 REPL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0435, \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>~\/.node_repl_history<\/code>.\n<\/li>\n<li>\u0421\u0438\u043c\u0432\u043e\u043b \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u00ab<code>_\u00bb<\/code> \u2014 \u044d\u0442\u043e \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0414\u0443\u043c\u0430\u044e, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f.\n<\/li>\n<li>\u041a\u043e\u0433\u0434\u0430 Node \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 REPL, \u043c\u043e\u0434\u0443\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 (\u0442\u043e\u0447\u043d\u0435\u0435 \u2013 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0432\u0435\u0441\u0442\u0438 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 <code>os.arch()<\/code> \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u041e\u0421. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432\u0440\u043e\u0434\u0435 <code>require(`os`).arch();<\/code> \u043d\u0435 \u043d\u0443\u0436\u043d\u0430.  <\/li>\n<\/ol>\n<p>  <\/p>\n<h2><font color=\"#3AC1EF\">\u0418\u0442\u043e\u0433\u0438<\/font><\/h2>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u2013 \u0434\u0435\u043b\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435. \u041c\u043d\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e, \u0432\u0440\u043e\u0434\u0435 \u0431\u044b, \u0437\u043d\u0430\u0435\u0448\u044c \u0432\u0434\u043e\u043b\u044c \u0438 \u043f\u043e\u043f\u0435\u0440\u0451\u043a. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u043c\u043e\u0438 \u043d\u0430\u0445\u043e\u0434\u043a\u0438.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0437\u043d\u0430\u0435\u0442\u0435 \u0435\u0449\u0451 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043e Node.js? \u0415\u0441\u043b\u0438 \u0442\u0430\u043a \u2013 \u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \ud83d\ude42<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/318322\/\"> https:\/\/habrahabr.ru\/post\/318322\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0437\u043d\u0430\u044e Node. \u0412\u043e\u0442 \u0443\u0436\u0435 \u0442\u0440\u0438 \u0433\u043e\u0434\u0430, \u043a\u0430\u043a \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u0439\u0442\u043e\u0432, \u043d\u0430\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u0433\u043e. \u041d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u044f \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0435 \u0447\u0438\u0442\u0430\u043b.<\/p>\n<p>  \u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u043e\u0431 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u043c\u0435\u0442\u043e\u0434\u0430\u0445, \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u0442\u0438\u043f\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u043e\u0431\u043e \u0432\u0441\u0451\u043c \u043f\u0440\u043e\u0447\u0435\u043c, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0422\u0430\u043a \u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u0432 \u0437\u043d\u0430\u043d\u0438\u044f\u0445. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0437\u0430\u043d\u044f\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043a Node.js, \u0430 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043f\u043e HTML, DOM, \u043f\u043e Web API, CSS, SVG \u0438 EcmaScript.<\/p>\n<p>  <a href=\"https:\/\/habrahabr.ru\/company\/ruvds\/blog\/318322\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e21\/fbf\/1f7\/e21fbf1f75aef5ebb3411d7df24a1bc3.jpg\" alt=\"image\" \/><\/div>\n<p><\/a><br \/>  \u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Node.js \u043e\u0442\u043a\u0440\u044b\u043b\u043e \u043c\u043d\u0435 \u043d\u0435\u043c\u0430\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u0437\u043d\u0430\u043b. \u0418\u043c\u0438 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435. \u041d\u0430\u0447\u043d\u0443 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u0422\u0430\u043a \u0436\u0435 \u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u044e, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043d\u043e\u0432\u043e\u043c\u0443 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u043c\u0443 \u0441\u0432\u043e\u0438 \u0433\u0430\u0434\u0436\u0435\u0442\u044b.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-282953","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/282953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=282953"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/282953\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=282953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=282953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=282953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}