comparison xml/ru/docs/njs/examples.xml @ 2332:9d502d4305ac

Removed obsolete properties and examples from njs.
author Yaroslav Zhuravlev <yar@nginx.com>
date Tue, 26 Feb 2019 18:22:40 +0300
parents 8cef5ef98336
children aa20cba8027c
comparison
equal deleted inserted replaced
2331:5eba0f7b24a9 2332:9d502d4305ac
7 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd"> 7 <!DOCTYPE article SYSTEM "../../../../dtd/article.dtd">
8 8
9 <article name="Примеры использования" 9 <article name="Примеры использования"
10 link="/ru/docs/njs/examples.html" 10 link="/ru/docs/njs/examples.html"
11 lang="ru" 11 lang="ru"
12 rev="3"> 12 rev="4">
13 13
14 <section id="helloword" name="Hello World"> 14 <section id="helloword" name="Hello World">
15 15
16 <para> 16 <para>
17 <path>nginx.conf</path>: 17 <path>nginx.conf</path>:
303 </example> 303 </example>
304 </para> 304 </para>
305 305
306 </section> 306 </section>
307 307
308
309 <section id="legacy" name="Устаревшие примеры">
310
311 <section id="legacy_stream" name="Внедрение HTTP-заголовка при помощи stream proxy">
312
313 <para>
314 Начиная с версии njs <link doc="../njs/changes.xml" id="njs0.2.4">0.2.4</link>
315 <link doc="../stream/ngx_stream_js_module.xml" id="example">пример</link>
316 конфигурации в stream
317 был изменён.
318 Для njs <link doc="../njs/changes.xml" id="njs0.2.3">0.2.3</link>
319 и более ранних версий необходимо использовать следующий пример конфигурации:
320 <example>
321 load_module modules/ngx_stream_js_module.so;
322 ...
323
324 stream {
325 js_include stream.js;
326
327 js_set $foo foo;
328 js_set $bar bar;
329
330 server {
331 listen 12345;
332
333 js_preread qux;
334 return $foo;
335 }
336
337 server {
338 listen 12346;
339
340 js_access xyz;
341 proxy_pass 127.0.0.1:8000;
342 js_filter baz;
343 }
344 }
345
346 http {
347 server {
348 listen 8000;
349 location / {
350 return 200 $http_foo\n;
351 }
352 }
353 }
354 </example>
355 </para>
356
357 <para>
358 Файл <path>stream.js</path>:
359 <example>
360 var req = '';
361 var matched = 0;
362 var line = '';
363
364 function qux(s) {
365 var n = s.buffer.indexOf('\n');
366 if (n == -1) {
367 return s.AGAIN;
368 }
369
370 line = s.buffer.substr(0, n);
371 }
372
373 function foo(s) {
374 return line;
375 }
376
377 function bar(s) {
378 var v = s.variables;
379 s.log("hello from bar() handler!");
380 return "foo-var" + v.remote_port + "; pid=" + v.pid;
381 }
382
383 // Фильтр обрабатывает один буфер за вызов.
384 // Буфер недоступен в s.buffer для
385 // чтения и записи. Вызывается в обоих направлениях.
386
387 function baz(s) {
388 if (s.fromUpstream || matched) {
389 return;
390 }
391
392 // Отключение определённых адресов.
393
394 if (s.remoteAddress.match('^192.*')) {
395 return s.ERROR;
396 }
397
398 // Чтение строки HTTP-запроса.
399 // Получение байт в 'req' до того как
400 // будет прочитана строка запроса. Очистка текущего буфера
401 // для отключения вывода.
402
403 req = req + s.buffer;
404 s.buffer = '';
405
406 var n = req.search('\n');
407
408 if (n != -1) {
409 // Inject a new HTTP header.
410 var rest = req.substr(n + 1);
411 req = req.substr(0, n + 1);
412
413 var addr = s.remoteAddress;
414
415 s.log('req:' + req);
416 s.log('rest:' + rest);
417
418 // Вывод результата и пропуск дальнейшей
419 // обработки.
420
421 s.buffer = req + 'Foo: addr_' + addr + '\r\n' + rest;
422 matched = 1;
423 }
424 }
425
426 function xyz(s) {
427 if (s.remoteAddress.match('^192.*')) {
428 return s.ABORT;
429 }
430 }
431 </example>
432 </para>
433
434 </section>
435
436 </section>
437
438 </article> 308 </article>