diff xml/ru/docs/njs/index.xml @ 2245:87a0e2c73a25

Refactored njs documentation.
author Yaroslav Zhuravlev <yar@nginx.com>
date Mon, 24 Sep 2018 19:10:29 +0300
parents 467aef18bf12
children 32ba43abf9cd
line wrap: on
line diff
--- a/xml/ru/docs/njs/index.xml	Mon Sep 24 19:10:17 2018 +0300
+++ b/xml/ru/docs/njs/index.xml	Mon Sep 24 19:10:29 2018 +0300
@@ -9,191 +9,52 @@
 <article name="Сценарный язык njs"
         link="/ru/docs/njs/index.html"
         lang="ru"
-        rev="23">
-
-<section id="summary">
+        rev="24"
+        toc="no">
 
-<para>
-njs - это подмножество языка JavaScript, который позволяет
-задавать обработчики location и переменных в
-<link doc="../http/ngx_http_js_module.xml">http</link> и
-<link doc="../stream/ngx_stream_js_module.xml">stream</link>.
-njs совместим с
-<link url="http://www.ecma-international.org/ecma-262/5.1/">ECMAScript 5.1</link>
-(строгий режим) c некоторыми расширениями
-<link url="http://www.ecma-international.org/ecma-262/6.0/">ECMAScript 6</link>.
-Совместимость находится в стадии развития.
-</para>
-
-</section>
-
-
-<section id="supported" name="Готовая функциональность">
+<section id="links">
 
 <para>
 <list type="bullet">
 
 <listitem>
-Логические значения, числа, строки, объекты, массивы,
-функции и регулярные выражения
-</listitem>
-
-<listitem>
-ES5.1 операторы, ES7 операторы возведения в степень
-</listitem>
-
-<listitem>
-ES5.1 инструкции: <literal>var</literal>, <literal>if</literal>,
-<literal>else</literal>, <literal>switch</literal>, <literal>for</literal>,
-<literal>for in</literal>, <literal>while</literal>,
-<literal>do while</literal>, <literal>break</literal>,
-<literal>continue</literal>, <literal>return</literal>, <literal>try</literal>,
-<literal>catch</literal>, <literal>throw</literal>, <literal>finally</literal>
-</listitem>
-
-<listitem>
-ES6 методы и свойства <literal>Number</literal> и
-<literal>Math</literal>
-</listitem>
-
-<listitem>
-Методы <literal>String</literal>:
-<list type="bullet">
-
-<listitem>
-ES5.1:
-<literal>fromCharCode</literal>, <literal>concat</literal>,
-<literal>slice</literal>, <literal>substring</literal>,
-<literal>substr</literal>, <literal>charAt</literal>,
-<literal>charCodeAt</literal>, <literal>indexOf</literal>,
-<literal>lastIndexOf</literal>, <literal>toLowerCase</literal>,
-<literal>toUpperCase</literal>, <literal>trim</literal>,
-<literal>search</literal>, <literal>match</literal>, <literal>split</literal>,
-<literal>replace</literal>
+<link doc="install.xml"/>
 </listitem>
 
 <listitem>
-ES6:
-<literal>fromCodePoint</literal>, <literal>codePointAt</literal>,
-<literal>includes</literal>, <literal>startsWith</literal>,
-<literal>endsWith</literal>, <literal>repeat</literal>
-</listitem>
-
-<listitem>
-нестандартные:
-<literal>bytesFrom</literal> (0.2.3),
-<literal>fromUTF8</literal>, <literal>toUTF8</literal>,
-<literal>fromBytes</literal>, <literal>toBytes</literal>
-</listitem>
-</list>
-
+<link doc="njs_changes.xml">Изменения в njs</link>
 </listitem>
 
 <listitem>
-Методы <literal>Object</literal>:
-<list type="bullet">
+<link doc="njs_api.xml"/>
+</listitem>
+
 <listitem>
-ES5.1:
-<literal>create</literal> (поддержка без списка свойств),
-<literal>keys</literal>,
-<literal>defineProperty</literal>,
-<literal>defineProperties</literal>,
-<literal>getOwnPropertyDescriptor</literal>,
-<literal>getPrototypeOf</literal>,
-<literal>hasOwnProperty</literal>,
-<literal>isPrototypeOf</literal>,
-<literal>preventExtensions</literal>,
-<literal>isExtensible</literal>,
-<literal>freeze</literal>,
-<literal>isFrozen</literal>,
-<literal>seal</literal>,
-<literal>isSealed</literal>
-</listitem>
-</list>
-
+<link doc="examples.xml"/>
 </listitem>
 
 <listitem>
-Методы <literal>Array</literal>:
-<list type="bullet">
-<listitem>
-ES5.1:
-<literal>isArray</literal>, <literal>slice</literal>, <literal>splice</literal>,
-<literal>push</literal>, <literal>pop</literal>, <literal>unshift</literal>,
-<literal>shift</literal>, <literal>reverse</literal>, <literal>sort</literal>,
-<literal>join</literal>, <literal>concat</literal>, <literal>indexOf</literal>,
-<literal>lastIndexOf</literal>, <literal>forEach</literal>,
-<literal>some</literal>, <literal>every</literal>, <literal>filter</literal>,
-<literal>map</literal>, <literal>reduce</literal>,
-<literal>reduceRight</literal>
-</listitem>
-
-<listitem>
-ES6:
-<literal>of</literal>, <literal>fill</literal>, <literal>find</literal>,
-<literal>findIndex</literal>
-</listitem>
-
-<listitem>
-ES7: <literal>includes</literal>
-</listitem>
-</list>
-
-</listitem>
-
-<listitem>
-ES5.1 методы <literal>Function</literal>:
-<literal>call</literal>, <literal>apply</literal>, <literal>bind</literal>
-</listitem>
-
-<listitem>
-ES5.1 методы <literal>RegExp</literal>:
-<literal>test</literal>, <literal>exec</literal>
+<link doc="compatibility.xml"/>
 </listitem>
 
 <listitem>
-ES5.1 методы <literal>Date</literal>
-</listitem>
-
-<listitem>
-ES5.1 объект <literal>JSON</literal>
+<link doc="cli.xml"/>
 </listitem>
 
+</list>
+</para>
+
+<para>
+<list type="bullet">
+
 <listitem>
-ES5.1 глобальные функции:
-<literal>isFinite</literal>, <literal>isNaN</literal>,
-<literal>parseFloat</literal>, <literal>parseInt</literal>,
-<literal>decodeURI</literal>, <literal>decodeURIComponent</literal>,
-<literal>encodeURI</literal>, <literal>encodeURIComponent</literal>
+<link doc="../http/ngx_http_js_module.xml">
+ngx_http_js_module</link>
 </listitem>
 
 <listitem>
-Объекты <literal>Error</literal>:
-<literal>Error</literal>, <literal>EvalError</literal>,
-<literal>InternalError</literal>, <literal>RangeError</literal>,
-<literal>ReferenceError</literal>, <literal>SyntaxError</literal>,
-<literal>TypeError</literal>, <literal>URIError</literal>
-</listitem>
-
-<listitem>
-Функции <literal>setTimeout()</literal> и <literal>clearTimeout()</literal>
-(0.2.0)
-</listitem>
-
-<listitem>
-Методы <literal>File system</literal>
-<link url="https://nodejs.org/api/fs.html#fs_file_system">стиль Node.js</link>:
-<literal>fs.readFile</literal>, <literal>fs.readFileSync</literal>,
-<literal>fs.appendFile</literal>, <literal>fs.appendFileSync</literal>,
-<literal>fs.writeFile</literal>, <literal>fs.writeFileSync</literal>
-</listitem>
-
-<listitem>
-Методы <literal>Crypto</literal>
-<link url="https://nodejs.org/api/crypto.html#crypto_class_hash">стиль Node.js</link>
-(0.2.0):
-<literal>crypto.createHash</literal>,
-<literal>crypto.createHmac</literal>
+<link doc="../stream/ngx_stream_js_module.xml">
+ngx_stream_js_module</link>
 </listitem>
 
 </list>
@@ -202,173 +63,109 @@
 </section>
 
 
-<section id="not_supported" name="Функциональность в разработке">
+<section id="summary">
+
+<para>
+njs - это подмножество языка JavaScript, позволяющее
+расширить функциональность nginx.
+njs совместим с
+<link url="http://www.ecma-international.org/ecma-262/5.1/">ECMAScript 5.1</link>
+(строгий режим) c некоторыми расширениями
+<link url="http://www.ecma-international.org/ecma-262/6.0/">ECMAScript 6</link>
+и позже.
+Совместимость находится в стадии
+<link doc="compatibility.xml">развития</link>.
+</para>
+
+</section>
+
+
+<section id="usecases" name="Сценарии использования">
 
 <para>
 <list type="bullet">
 
 <listitem>
-ES6 объявления <literal>let</literal> и <literal>const</literal>
-</listitem>
-
-<listitem>
-labels
-</listitem>
-
-<listitem>
-массив <literal>arguments</literal>
+Комплексное управление доступом и проверка защиты при помощи njs
+до получения запроса сервером группы
 </listitem>
 
 <listitem>
-функция <literal>eval</literal>
-</listitem>
-
-<listitem>
-конструктор <literal>new Function()</literal>
+Управление заголовками ответа
 </listitem>
 
 <listitem>
-функции <literal>setInterval</literal>,
-<literal>setImmediate</literal>
-</listitem>
-
-<listitem>
-дроби без целой части (<literal>.235</literal>)
+Создание гибких асинхронных обработчиков содержимого и фильтров
 </listitem>
 
 </list>
+Подробнее о сценариях использования
+см. в <link doc="examples.xml">примерах</link>
+и <link url="https://www.nginx.com/blog/tag/nginscript/">блогпостах</link>.
 </para>
 
 </section>
 
 
-<section id="changelog" name="История изменений">
-
-<para>
-Полная история изменений njs доступна
-<link doc="njs_changes.xml">здесь</link>.
-</para>
-</section>
-
-<section id="njs_api" name="Справочник njs API">
+<section id="example" name="Базовый пример HTTP">
 
 <para>
-Справочник njs API доступен
-<link doc="njs_api.xml">здесь</link>.
-</para>
-</section>
-
-
-<section id="install" name="Загрузка и установка">
-
-<para>
-njs доступен в двух модулях:
+Чтобы использовать njs в nginx, необходимо:
 <list type="bullet">
 
 <listitem>
-<link doc="../http/ngx_http_js_module.xml">ngx_http_js_module</link>
+<para>
+<link doc="install.xml">установить</link> njs
+</para>
+</listitem>
+
+<listitem id="hello_world">
+<para>
+создать файл сценария njs, например <path>hello_world.js</path>.
+Описание свойств и методов языка njs
+см. в <link doc="njs_api.xml">справочнике</link>.
+<example>
+function hello(r) {
+    r.return(200, “Hello world!”);
+}
+</example>
+</para>
 </listitem>
 
 <listitem>
-<link doc="../stream/ngx_stream_js_module.xml">ngx_stream_js_module</link>
+
+<para>
+в файле <path>nginx.conf</path> включить
+модуль <link doc="../http/ngx_http_js_module.xml">ngx_http_js_module</link>
+и указать директиву
+<link doc="../http/ngx_http_js_module.xml" id="js_include">js_include</link>
+с файлом сценария <path>hello_world.js</path>:
+<example>
+load_module modules/ngx_http_js_module.so;
+
+events {}
+
+http {
+    js_include hello_world.js;
+
+    server {
+        listen 8000;
+
+        location / {
+            js_content hello;
+        }
+    }
+}
+
+</example>
+</para>
 </listitem>
 
 </list>
-По умолчанию модули не собираются
-их необходимо собрать из исходного кода
-или установить из отдельного пакета Linux.
-Кроме того, в пакете Linux предоставляется
-<link id="cli">утилита</link> командной строки njs.
-</para>
-
-
-<section id="install_package" name="Установка пакета Linux">
-<para>
-Для установки модулей njs на Linux могут быть использованы
-<link doc="../../linux_packages.xml" id="dynmodules">пакеты</link>:
-<list type="bullet">
-
-<listitem>
-<literal>nginx-module-njs</literal> —
-<link doc="../ngx_core_module.xml" id="load_module">динамические</link> модули
-njs
-</listitem>
-
-<listitem>
-<literal>nginx-module-njs-dbg</literal> — debug-символы для
-пакета <literal>nginx-module-njs</literal>
-</listitem>
-
-</list>
+ Также доступна отдельная утилита <link doc="cli.xml">командной строки</link>,
+которая может использоваться независимо от nginx для разработки и отладки njs.
 </para>
 
 </section>
 
-
-<section id="install_sources" name="Установка из исходных файлов">
-
-<para>
-<link url="http://hg.nginx.org/njs">Репозиторий</link>
-с исходным кодом njs можно клонировать следующей командой:
-(необходим клиент <link url="https://www.mercurial-scm.org">Mercurial</link>):
-<example>
-hg clone http://hg.nginx.org/njs
-</example>
-Затем модули необходимо собрать с помощью
-конфигурационного параметра <literal>--add-module</literal>:
-<example>
-./configure --add-module=<value>path-to-njs</value>/nginx
-</example>
-Модули также можно собрать как
-<link doc="../ngx_core_module.xml" id="load_module">динамические</link>:
-<example>
-./configure --add-dynamic-module=<value>path-to-njs</value>/nginx
-</example>
-</para>
-
-<para>
-Чтобы собрать только <link id="cli">утилиту</link> командной строки njs
-необходимо запустить
-команды <literal>./configure</literal> и <literal>make njs</literal>
-из корневого каталога.
-Утилита доступна как <literal>./build/njs</literal>.
-</para>
-
-</section>
-
-
-<section id="cli" name="Интерфейс командной строки">
-
-<para>
-Создание и отладка njs-скриптов может осуществляться
-в командной строке.
-Утилита командной строки доступна после установки
-<link id="install_package">пакета</link> Linux
-или после сборки из <link id="install_sources">исходных файлов</link>.
-В отличие от njs, запущенном внутри nginx,
-в утилите недоступны объекты nginx
-(<link doc="njs_api.xml" id="http">HTTP</link> и
-<link doc="njs_api.xml" id="stream">Stream</link>).
-<example>
-$ echo "2**3" | njs -
-8
-
-$ njs
->> var o = {a:[]}
-undefined
-
->> JSON.stringify(o, undefined,1)
-{
- "a": [
-
- ]
-}
->>
-</example>
-</para>
-
-</section>
-
-</section>
-
 </article>