comparison xml/ru/docs/stream/ngx_stream_js_module.xml @ 1843:3492eb9b8138

Translated http and stream js modules into Russian.
author Yaroslav Zhuravlev <yar@nginx.com>
date Mon, 28 Nov 2016 21:29:02 +0300
parents xml/en/docs/stream/ngx_stream_js_module.xml@15632fc2d548
children f56626ce9c40
comparison
equal deleted inserted replaced
1842:db848aaa123a 1843:3492eb9b8138
1 <?xml version="1.0"?>
2
3 <!--
4 Copyright (C) Nginx, Inc.
5 -->
6
7 <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd">
8
9 <module name="Модуль ngx_stream_js_module"
10 link="/ru/docs/stream/ngx_stream_js_module.html"
11 lang="ru"
12 rev="1">
13
14 <section id="summary">
15
16 <para>
17 Модуль <literal>ngx_stream_js_module</literal> позволяет задавать
18 обработчики на JavaScript.
19 </para>
20
21 <para>
22 По умолчанию этот модуль не собирается, его необходимо собрать с
23 модулем nginx JavaScript с помощью конфигурационного параметра
24 <literal>--add_module</literal>:
25 <example>
26 ./configure --add-module=<value>path-to-njs</value>/nginx
27 </example>
28 <link url="http://hg.nginx.org/njs">Репозиторий</link>
29 модуля nginx JavaScript можно клонировать следующей командой
30 (необходим клиент <link url="https://www.mercurial-scm.org">Mercurial</link>):
31 <example>
32 hg clone http://hg.nginx.org/njs
33 </example>
34 Модуль также можно собрать как
35 <link doc="../ngx_core_module.xml" id="load_module">динамический</link>:
36 <example>
37 ./configure --add-dynamic_module=<value>path-to-njs</value>/nginx
38 </example>
39 </para>
40
41 </section>
42
43
44 <section id="issues" name="Известные проблемы">
45
46 <para>
47 Модуль экспериментальный, поэтому возможно всё.
48 </para>
49
50 </section>
51
52
53 <section id="example" name="Пример конфигурации">
54
55 <para>
56 <example>
57 stream {
58 js_include stream.js;
59
60 server {
61 listen 12345;
62
63 js_preread qux;
64
65 js_set $foo foo;
66 js_set $bar bar;
67
68 return foo;
69 }
70
71 server {
72 listen 12346;
73
74 js_access xyz;
75 proxy_pass 127.0.0.1:8000;
76 js_filter baz;
77 }
78 }
79
80 http {
81 server {
82 listen 8000;
83 location / {
84 return 200 $http_foo\n;
85 }
86 }
87 }
88 </example>
89 </para>
90
91 <para>
92 Файл <path>stream.js</path>:
93 <example>
94 var req = '';
95 var matched = 0;
96 var line = '';
97
98 function qux(s) {
99 n = s.buffer.indexOf('\n');
100 if (n == -1) {
101 return s.AGAIN;
102 }
103
104 line = s.buffer.substr(0, n);
105 }
106
107 function foo(s) {
108 return line;
109 }
110
111 function bar(s) {
112 var v = s.variables;
113 s.log("hello from bar() handler!");
114 return "foo-var" + v.remote_port + "; pid=" + v.pid;
115 }
116
117 // Фильтр обрабатывает один буфер за вызов.
118 // Буфер недоступен в s.buffer для
119 // чтения и записи. Вызывается в обоих направлениях.
120
121 function baz(s) {
122 if (s.fromUpstream || matched) {
123 return;
124 }
125
126 // Отключение определённых адресов.
127
128 if (s.remoteAddress.match('^192.*')) {
129 return s.ERROR;
130 }
131
132 // Чтение строки HTTP-запроса.
133 // Получение байт в 'req' до того как
134 // будет прочитана строка запроса. Очистка текущего буфера
135 // для отключения вывода.
136
137 req = req + s.buffer;
138 s.buffer = '';
139
140 n = req.search('\n');
141
142 if (n != -1) {
143 // Вставка нового HTTP-заголовка.
144 var rest = req.substr(n + 1);
145 req = req.substr(0, n + 1);
146
147 addr = s.remoteAddress;
148
149 s.log('req:' + req);
150 s.log('rest:' + rest);
151
152 // Вывод результата и пропуск дальнейшей
153 // обработки.
154
155 s.buffer = req + 'Foo: addr_' + addr + '\r\n' + rest;
156 matched = 1;
157 }
158 }
159
160 function xyz(s) {
161 if (s.remoteAddress.match('^192.*')) {
162 return s.ABORT;
163 }
164 }
165 </example>
166 </para>
167
168 </section>
169
170
171 <section id="directives" name="Директивы">
172
173 <directive name="js_access">
174 <syntax><value>функция</value></syntax>
175 <default/>
176 <context>stream</context>
177 <context>server</context>
178
179 <para>
180 Задаёт функцию JavaScript, которая будет вызываться в
181 <link doc="stream_processing.xml" id="access_phase">access</link>-фазе.
182 </para>
183
184 </directive>
185
186
187 <directive name="js_filter">
188 <syntax><value>функция</value></syntax>
189 <default/>
190 <context>stream</context>
191 <context>server</context>
192
193 <para>
194 Задаёт фильтр данных.
195 </para>
196
197 </directive>
198
199
200 <directive name="js_include">
201 <syntax><value>файл</value></syntax>
202 <default/>
203 <context>stream</context>
204 <context>server</context>
205
206 <para>
207 Задаёт файл, который позволяет
208 задавать обработчики server и переменных на JavaScript.
209 </para>
210
211 </directive>
212
213
214 <directive name="js_preread">
215 <syntax><value>функция</value></syntax>
216 <default/>
217 <context>stream</context>
218 <context>server</context>
219
220 <para>
221 Задаёт функцию JavaScript, которая будет вызываться в
222 <link doc="stream_processing.xml" id="preread_phase">preread</link>-фазе.
223 </para>
224
225 </directive>
226
227
228 <directive name="js_set">
229 <syntax>
230 <value>$переменная</value> <value>функция</value></syntax>
231 <default/>
232 <context>stream</context>
233 <context>server</context>
234
235 <para>
236 Задаёт функцию JavaScript для указанной переменной.
237 </para>
238
239 </directive>
240
241 </section>
242
243
244 <section id="properties" name="Свойства объекта сессии">
245 <para>
246 Каждый stream-обработчик JavaScript получает один аргумент:
247 объект stream-сессии.
248 </para>
249
250 <para>
251 Объект сессии имеет следующие свойства:
252
253 <list type="tag">
254
255 <tag-name><literal>remoteAddress</literal></tag-name>
256 <tag-desc>
257 адрес клиента, только чтение
258 </tag-desc>
259
260 <tag-name><literal>eof</literal></tag-name>
261 <tag-desc>
262 логическое свойство,
263 true, если текущий буфер является последним буфером,
264 только чтение
265 </tag-desc>
266
267 <tag-name><literal>fromUpstream</literal></tag-name>
268 <tag-desc>
269 логическое свойство,
270 true, если текущий буфер является буфером от проксируемого сервера к клиенту,
271 только чтение
272 </tag-desc>
273
274 <tag-name><literal>buffer</literal></tag-name>
275 <tag-desc>
276 текущий буфер, доступен для записи
277 </tag-desc>
278
279 <tag-name><literal>variables{}</literal></tag-name>
280 <tag-desc>
281 объект переменных nginx, только чтение
282 </tag-desc>
283
284 <tag-name><literal>OK</literal></tag-name>
285 <tag-desc>
286 код <literal>OK</literal>
287 </tag-desc>
288
289 <tag-name><literal>DECLINED</literal></tag-name>
290 <tag-desc>
291 код <literal>DECLINED</literal>
292 </tag-desc>
293
294 <tag-name><literal>AGAIN</literal></tag-name>
295 <tag-desc>
296 код <literal>AGAIN</literal>
297 </tag-desc>
298
299 <tag-name><literal>ERROR</literal></tag-name>
300 <tag-desc>
301 код <literal>ERROR</literal>
302 </tag-desc>
303
304 <tag-name><literal>ABORT</literal></tag-name>
305 <tag-desc>
306 код <literal>ABORT</literal>
307 </tag-desc>
308 </list>
309 </para>
310
311 <para>
312 Объект сессии имеет следующие методы:
313
314 <list type="tag">
315
316 <tag-name><literal>log(<value>строка</value>)</literal></tag-name>
317 <tag-desc>
318 записывает отправленную <value>строку</value> в лог-файл ошибок
319 </tag-desc>
320 </list>
321 </para>
322
323 </section>
324
325 </module>