Mercurial > hg > nginx-site
comparison 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 |
comparison
equal
deleted
inserted
replaced
2244:467aef18bf12 | 2245:87a0e2c73a25 |
---|---|
7 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd"> | 7 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd"> |
8 | 8 |
9 <article name="Сценарный язык njs" | 9 <article name="Сценарный язык njs" |
10 link="/ru/docs/njs/index.html" | 10 link="/ru/docs/njs/index.html" |
11 lang="ru" | 11 lang="ru" |
12 rev="23"> | 12 rev="24" |
13 toc="no"> | |
13 | 14 |
14 <section id="summary"> | 15 <section id="links"> |
15 | |
16 <para> | |
17 njs - это подмножество языка JavaScript, который позволяет | |
18 задавать обработчики location и переменных в | |
19 <link doc="../http/ngx_http_js_module.xml">http</link> и | |
20 <link doc="../stream/ngx_stream_js_module.xml">stream</link>. | |
21 njs совместим с | |
22 <link url="http://www.ecma-international.org/ecma-262/5.1/">ECMAScript 5.1</link> | |
23 (строгий режим) c некоторыми расширениями | |
24 <link url="http://www.ecma-international.org/ecma-262/6.0/">ECMAScript 6</link>. | |
25 Совместимость находится в стадии развития. | |
26 </para> | |
27 | |
28 </section> | |
29 | |
30 | |
31 <section id="supported" name="Готовая функциональность"> | |
32 | 16 |
33 <para> | 17 <para> |
34 <list type="bullet"> | 18 <list type="bullet"> |
35 | 19 |
36 <listitem> | 20 <listitem> |
37 Логические значения, числа, строки, объекты, массивы, | 21 <link doc="install.xml"/> |
38 функции и регулярные выражения | |
39 </listitem> | 22 </listitem> |
40 | 23 |
41 <listitem> | 24 <listitem> |
42 ES5.1 операторы, ES7 операторы возведения в степень | 25 <link doc="njs_changes.xml">Изменения в njs</link> |
43 </listitem> | 26 </listitem> |
44 | 27 |
45 <listitem> | 28 <listitem> |
46 ES5.1 инструкции: <literal>var</literal>, <literal>if</literal>, | 29 <link doc="njs_api.xml"/> |
47 <literal>else</literal>, <literal>switch</literal>, <literal>for</literal>, | |
48 <literal>for in</literal>, <literal>while</literal>, | |
49 <literal>do while</literal>, <literal>break</literal>, | |
50 <literal>continue</literal>, <literal>return</literal>, <literal>try</literal>, | |
51 <literal>catch</literal>, <literal>throw</literal>, <literal>finally</literal> | |
52 </listitem> | 30 </listitem> |
53 | 31 |
54 <listitem> | 32 <listitem> |
55 ES6 методы и свойства <literal>Number</literal> и | 33 <link doc="examples.xml"/> |
56 <literal>Math</literal> | |
57 </listitem> | 34 </listitem> |
58 | 35 |
59 <listitem> | 36 <listitem> |
60 Методы <literal>String</literal>: | 37 <link doc="compatibility.xml"/> |
38 </listitem> | |
39 | |
40 <listitem> | |
41 <link doc="cli.xml"/> | |
42 </listitem> | |
43 | |
44 </list> | |
45 </para> | |
46 | |
47 <para> | |
61 <list type="bullet"> | 48 <list type="bullet"> |
62 | 49 |
63 <listitem> | 50 <listitem> |
64 ES5.1: | 51 <link doc="../http/ngx_http_js_module.xml"> |
65 <literal>fromCharCode</literal>, <literal>concat</literal>, | 52 ngx_http_js_module</link> |
66 <literal>slice</literal>, <literal>substring</literal>, | |
67 <literal>substr</literal>, <literal>charAt</literal>, | |
68 <literal>charCodeAt</literal>, <literal>indexOf</literal>, | |
69 <literal>lastIndexOf</literal>, <literal>toLowerCase</literal>, | |
70 <literal>toUpperCase</literal>, <literal>trim</literal>, | |
71 <literal>search</literal>, <literal>match</literal>, <literal>split</literal>, | |
72 <literal>replace</literal> | |
73 </listitem> | 53 </listitem> |
74 | 54 |
75 <listitem> | 55 <listitem> |
76 ES6: | 56 <link doc="../stream/ngx_stream_js_module.xml"> |
77 <literal>fromCodePoint</literal>, <literal>codePointAt</literal>, | 57 ngx_stream_js_module</link> |
78 <literal>includes</literal>, <literal>startsWith</literal>, | |
79 <literal>endsWith</literal>, <literal>repeat</literal> | |
80 </listitem> | |
81 | |
82 <listitem> | |
83 нестандартные: | |
84 <literal>bytesFrom</literal> (0.2.3), | |
85 <literal>fromUTF8</literal>, <literal>toUTF8</literal>, | |
86 <literal>fromBytes</literal>, <literal>toBytes</literal> | |
87 </listitem> | |
88 </list> | |
89 | |
90 </listitem> | |
91 | |
92 <listitem> | |
93 Методы <literal>Object</literal>: | |
94 <list type="bullet"> | |
95 <listitem> | |
96 ES5.1: | |
97 <literal>create</literal> (поддержка без списка свойств), | |
98 <literal>keys</literal>, | |
99 <literal>defineProperty</literal>, | |
100 <literal>defineProperties</literal>, | |
101 <literal>getOwnPropertyDescriptor</literal>, | |
102 <literal>getPrototypeOf</literal>, | |
103 <literal>hasOwnProperty</literal>, | |
104 <literal>isPrototypeOf</literal>, | |
105 <literal>preventExtensions</literal>, | |
106 <literal>isExtensible</literal>, | |
107 <literal>freeze</literal>, | |
108 <literal>isFrozen</literal>, | |
109 <literal>seal</literal>, | |
110 <literal>isSealed</literal> | |
111 </listitem> | |
112 </list> | |
113 | |
114 </listitem> | |
115 | |
116 <listitem> | |
117 Методы <literal>Array</literal>: | |
118 <list type="bullet"> | |
119 <listitem> | |
120 ES5.1: | |
121 <literal>isArray</literal>, <literal>slice</literal>, <literal>splice</literal>, | |
122 <literal>push</literal>, <literal>pop</literal>, <literal>unshift</literal>, | |
123 <literal>shift</literal>, <literal>reverse</literal>, <literal>sort</literal>, | |
124 <literal>join</literal>, <literal>concat</literal>, <literal>indexOf</literal>, | |
125 <literal>lastIndexOf</literal>, <literal>forEach</literal>, | |
126 <literal>some</literal>, <literal>every</literal>, <literal>filter</literal>, | |
127 <literal>map</literal>, <literal>reduce</literal>, | |
128 <literal>reduceRight</literal> | |
129 </listitem> | |
130 | |
131 <listitem> | |
132 ES6: | |
133 <literal>of</literal>, <literal>fill</literal>, <literal>find</literal>, | |
134 <literal>findIndex</literal> | |
135 </listitem> | |
136 | |
137 <listitem> | |
138 ES7: <literal>includes</literal> | |
139 </listitem> | |
140 </list> | |
141 | |
142 </listitem> | |
143 | |
144 <listitem> | |
145 ES5.1 методы <literal>Function</literal>: | |
146 <literal>call</literal>, <literal>apply</literal>, <literal>bind</literal> | |
147 </listitem> | |
148 | |
149 <listitem> | |
150 ES5.1 методы <literal>RegExp</literal>: | |
151 <literal>test</literal>, <literal>exec</literal> | |
152 </listitem> | |
153 | |
154 <listitem> | |
155 ES5.1 методы <literal>Date</literal> | |
156 </listitem> | |
157 | |
158 <listitem> | |
159 ES5.1 объект <literal>JSON</literal> | |
160 </listitem> | |
161 | |
162 <listitem> | |
163 ES5.1 глобальные функции: | |
164 <literal>isFinite</literal>, <literal>isNaN</literal>, | |
165 <literal>parseFloat</literal>, <literal>parseInt</literal>, | |
166 <literal>decodeURI</literal>, <literal>decodeURIComponent</literal>, | |
167 <literal>encodeURI</literal>, <literal>encodeURIComponent</literal> | |
168 </listitem> | |
169 | |
170 <listitem> | |
171 Объекты <literal>Error</literal>: | |
172 <literal>Error</literal>, <literal>EvalError</literal>, | |
173 <literal>InternalError</literal>, <literal>RangeError</literal>, | |
174 <literal>ReferenceError</literal>, <literal>SyntaxError</literal>, | |
175 <literal>TypeError</literal>, <literal>URIError</literal> | |
176 </listitem> | |
177 | |
178 <listitem> | |
179 Функции <literal>setTimeout()</literal> и <literal>clearTimeout()</literal> | |
180 (0.2.0) | |
181 </listitem> | |
182 | |
183 <listitem> | |
184 Методы <literal>File system</literal> | |
185 <link url="https://nodejs.org/api/fs.html#fs_file_system">стиль Node.js</link>: | |
186 <literal>fs.readFile</literal>, <literal>fs.readFileSync</literal>, | |
187 <literal>fs.appendFile</literal>, <literal>fs.appendFileSync</literal>, | |
188 <literal>fs.writeFile</literal>, <literal>fs.writeFileSync</literal> | |
189 </listitem> | |
190 | |
191 <listitem> | |
192 Методы <literal>Crypto</literal> | |
193 <link url="https://nodejs.org/api/crypto.html#crypto_class_hash">стиль Node.js</link> | |
194 (0.2.0): | |
195 <literal>crypto.createHash</literal>, | |
196 <literal>crypto.createHmac</literal> | |
197 </listitem> | 58 </listitem> |
198 | 59 |
199 </list> | 60 </list> |
200 </para> | 61 </para> |
201 | 62 |
202 </section> | 63 </section> |
203 | 64 |
204 | 65 |
205 <section id="not_supported" name="Функциональность в разработке"> | 66 <section id="summary"> |
67 | |
68 <para> | |
69 njs - это подмножество языка JavaScript, позволяющее | |
70 расширить функциональность nginx. | |
71 njs совместим с | |
72 <link url="http://www.ecma-international.org/ecma-262/5.1/">ECMAScript 5.1</link> | |
73 (строгий режим) c некоторыми расширениями | |
74 <link url="http://www.ecma-international.org/ecma-262/6.0/">ECMAScript 6</link> | |
75 и позже. | |
76 Совместимость находится в стадии | |
77 <link doc="compatibility.xml">развития</link>. | |
78 </para> | |
79 | |
80 </section> | |
81 | |
82 | |
83 <section id="usecases" name="Сценарии использования"> | |
206 | 84 |
207 <para> | 85 <para> |
208 <list type="bullet"> | 86 <list type="bullet"> |
209 | 87 |
210 <listitem> | 88 <listitem> |
211 ES6 объявления <literal>let</literal> и <literal>const</literal> | 89 Комплексное управление доступом и проверка защиты при помощи njs |
90 до получения запроса сервером группы | |
212 </listitem> | 91 </listitem> |
213 | 92 |
214 <listitem> | 93 <listitem> |
215 labels | 94 Управление заголовками ответа |
216 </listitem> | 95 </listitem> |
217 | 96 |
218 <listitem> | 97 <listitem> |
219 массив <literal>arguments</literal> | 98 Создание гибких асинхронных обработчиков содержимого и фильтров |
220 </listitem> | |
221 | |
222 <listitem> | |
223 функция <literal>eval</literal> | |
224 </listitem> | |
225 | |
226 <listitem> | |
227 конструктор <literal>new Function()</literal> | |
228 </listitem> | |
229 | |
230 <listitem> | |
231 функции <literal>setInterval</literal>, | |
232 <literal>setImmediate</literal> | |
233 </listitem> | |
234 | |
235 <listitem> | |
236 дроби без целой части (<literal>.235</literal>) | |
237 </listitem> | 99 </listitem> |
238 | 100 |
239 </list> | 101 </list> |
102 Подробнее о сценариях использования | |
103 см. в <link doc="examples.xml">примерах</link> | |
104 и <link url="https://www.nginx.com/blog/tag/nginscript/">блогпостах</link>. | |
240 </para> | 105 </para> |
241 | 106 |
242 </section> | 107 </section> |
243 | 108 |
244 | 109 |
245 <section id="changelog" name="История изменений"> | 110 <section id="example" name="Базовый пример HTTP"> |
246 | 111 |
247 <para> | 112 <para> |
248 Полная история изменений njs доступна | 113 Чтобы использовать njs в nginx, необходимо: |
249 <link doc="njs_changes.xml">здесь</link>. | |
250 </para> | |
251 </section> | |
252 | |
253 <section id="njs_api" name="Справочник njs API"> | |
254 | |
255 <para> | |
256 Справочник njs API доступен | |
257 <link doc="njs_api.xml">здесь</link>. | |
258 </para> | |
259 </section> | |
260 | |
261 | |
262 <section id="install" name="Загрузка и установка"> | |
263 | |
264 <para> | |
265 njs доступен в двух модулях: | |
266 <list type="bullet"> | 114 <list type="bullet"> |
267 | 115 |
268 <listitem> | 116 <listitem> |
269 <link doc="../http/ngx_http_js_module.xml">ngx_http_js_module</link> | 117 <para> |
118 <link doc="install.xml">установить</link> njs | |
119 </para> | |
120 </listitem> | |
121 | |
122 <listitem id="hello_world"> | |
123 <para> | |
124 создать файл сценария njs, например <path>hello_world.js</path>. | |
125 Описание свойств и методов языка njs | |
126 см. в <link doc="njs_api.xml">справочнике</link>. | |
127 <example> | |
128 function hello(r) { | |
129 r.return(200, “Hello world!”); | |
130 } | |
131 </example> | |
132 </para> | |
270 </listitem> | 133 </listitem> |
271 | 134 |
272 <listitem> | 135 <listitem> |
273 <link doc="../stream/ngx_stream_js_module.xml">ngx_stream_js_module</link> | 136 |
137 <para> | |
138 в файле <path>nginx.conf</path> включить | |
139 модуль <link doc="../http/ngx_http_js_module.xml">ngx_http_js_module</link> | |
140 и указать директиву | |
141 <link doc="../http/ngx_http_js_module.xml" id="js_include">js_include</link> | |
142 с файлом сценария <path>hello_world.js</path>: | |
143 <example> | |
144 load_module modules/ngx_http_js_module.so; | |
145 | |
146 events {} | |
147 | |
148 http { | |
149 js_include hello_world.js; | |
150 | |
151 server { | |
152 listen 8000; | |
153 | |
154 location / { | |
155 js_content hello; | |
156 } | |
157 } | |
158 } | |
159 | |
160 </example> | |
161 </para> | |
274 </listitem> | 162 </listitem> |
275 | 163 |
276 </list> | 164 </list> |
277 По умолчанию модули не собираются | 165 Также доступна отдельная утилита <link doc="cli.xml">командной строки</link>, |
278 их необходимо собрать из исходного кода | 166 которая может использоваться независимо от nginx для разработки и отладки njs. |
279 или установить из отдельного пакета Linux. | |
280 Кроме того, в пакете Linux предоставляется | |
281 <link id="cli">утилита</link> командной строки njs. | |
282 </para> | |
283 | |
284 | |
285 <section id="install_package" name="Установка пакета Linux"> | |
286 <para> | |
287 Для установки модулей njs на Linux могут быть использованы | |
288 <link doc="../../linux_packages.xml" id="dynmodules">пакеты</link>: | |
289 <list type="bullet"> | |
290 | |
291 <listitem> | |
292 <literal>nginx-module-njs</literal> — | |
293 <link doc="../ngx_core_module.xml" id="load_module">динамические</link> модули | |
294 njs | |
295 </listitem> | |
296 | |
297 <listitem> | |
298 <literal>nginx-module-njs-dbg</literal> — debug-символы для | |
299 пакета <literal>nginx-module-njs</literal> | |
300 </listitem> | |
301 | |
302 </list> | |
303 </para> | 167 </para> |
304 | 168 |
305 </section> | 169 </section> |
306 | 170 |
307 | |
308 <section id="install_sources" name="Установка из исходных файлов"> | |
309 | |
310 <para> | |
311 <link url="http://hg.nginx.org/njs">Репозиторий</link> | |
312 с исходным кодом njs можно клонировать следующей командой: | |
313 (необходим клиент <link url="https://www.mercurial-scm.org">Mercurial</link>): | |
314 <example> | |
315 hg clone http://hg.nginx.org/njs | |
316 </example> | |
317 Затем модули необходимо собрать с помощью | |
318 конфигурационного параметра <literal>--add-module</literal>: | |
319 <example> | |
320 ./configure --add-module=<value>path-to-njs</value>/nginx | |
321 </example> | |
322 Модули также можно собрать как | |
323 <link doc="../ngx_core_module.xml" id="load_module">динамические</link>: | |
324 <example> | |
325 ./configure --add-dynamic-module=<value>path-to-njs</value>/nginx | |
326 </example> | |
327 </para> | |
328 | |
329 <para> | |
330 Чтобы собрать только <link id="cli">утилиту</link> командной строки njs | |
331 необходимо запустить | |
332 команды <literal>./configure</literal> и <literal>make njs</literal> | |
333 из корневого каталога. | |
334 Утилита доступна как <literal>./build/njs</literal>. | |
335 </para> | |
336 | |
337 </section> | |
338 | |
339 | |
340 <section id="cli" name="Интерфейс командной строки"> | |
341 | |
342 <para> | |
343 Создание и отладка njs-скриптов может осуществляться | |
344 в командной строке. | |
345 Утилита командной строки доступна после установки | |
346 <link id="install_package">пакета</link> Linux | |
347 или после сборки из <link id="install_sources">исходных файлов</link>. | |
348 В отличие от njs, запущенном внутри nginx, | |
349 в утилите недоступны объекты nginx | |
350 (<link doc="njs_api.xml" id="http">HTTP</link> и | |
351 <link doc="njs_api.xml" id="stream">Stream</link>). | |
352 <example> | |
353 $ echo "2**3" | njs - | |
354 8 | |
355 | |
356 $ njs | |
357 >> var o = {a:[]} | |
358 undefined | |
359 | |
360 >> JSON.stringify(o, undefined,1) | |
361 { | |
362 "a": [ | |
363 | |
364 ] | |
365 } | |
366 >> | |
367 </example> | |
368 </para> | |
369 | |
370 </section> | |
371 | |
372 </section> | |
373 | |
374 </article> | 171 </article> |