# Fwd: Updated README to reflect changes in HTTP and Stream modules

**URL:** <https://www.ruby-forum.com/t/fwd-updated-readme-to-reflect-changes-in-http-and-stream-modules/244974>\
**Category:** NGINX\
**Created:** [July 21, 2016, 9:26am UTC](https://www.ruby-forum.com/t/fwd-updated-readme-to-reflect-changes-in-http-and-stream-modules/244974 "2016-07-21T09:26:56Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rafa\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/958977/32.png) [@Rafa\_F](https://www.ruby-forum.com/u/Rafa_F)\
**Post date:** [July 21, 2016, 9:26am UTC](https://www.ruby-forum.com/t/fwd-updated-readme-to-reflect-changes-in-http-and-stream-modules/244974/1 "2016-07-21T09:26:56Z")

</div>

Hello,

For those who doesn’t follow njs project closely: Roman and Igor  
just added njs support to the stream module and moved js scripting  
to separate files.

More details in the project README file you can find here:

[http://hg.nginx.org/njs/file/tip/README](http://hg.nginx.org/njs/file/tip/README)

-------- Forwarded Message --------  
Subject: [njs] Updated README to reflect changes in HTTP and Stream  
modules.  
Date: Wed, 20 Jul 2016 16:39:30 +0000  
From: Roman A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Reply-To: removed\_email\_address@domain.invalid  
To: removed\_email\_address@domain.invalid

details: [http://hg.nginx.org/njs/rev/3f8f801e2f53](http://hg.nginx.org/njs/rev/3f8f801e2f53)  
branches: changeset: 125:3f8f801e2f53  
user: Roman A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
date: Wed Jul 20 19:38:00 2016 +0300  
description:  
Updated README to reflect changes in HTTP and Stream modules.

diffstat:

README | 225  
++++++++++++++++++++++++++++++++++++++++±----------------------  
1 files changed, 144 insertions(+), 81 deletions(-)

diffs (264 lines):

## diff -r 740defed7584 -r 3f8f801e2f53 README — a/README Wed Jul 20 18:20:17 2016 +0300 +++ b/README Wed Jul 20 19:38:00 2016 +0300 @@ -1,5 +1,6 @@ -Configure nginx with HTTP JavaScript module using the --add-module option: +Configure nginx with HTTP and Stream JavaScript modules using the –add-module +option: ./configure --add-module=/nginx @@ -14,30 +15,39 @@ and add the following line to nginx.conf Please report your experiences to the NGINX development mailing list removed\_email\_address@domain.invalid ([nginx-devel Info Page](http://mailman.nginx.org/mailman/listinfo/nginx-devel)). -JavaScript objects

-$r  
-|- uri  
-|- method  
-|- httpVersion  
-|- remoteAddress  
-|- headers{}  
-|- args{}  
-|- response

- |- status
- |- headers{}
- |- contentType
- |- contentLength
- |- sendHeader()
- |- send(data)
- |- finish()  
+HTTP JavaScript module  
±---------------------

- 

+Each HTTP JavaScript handler receives two arguments - request and  
response.  
+

- function foo(req, res) {
- 

```
   ..

```

- }
- 

+The following properties are available:  
+  
+req

- 
  - uri

- 
  - method

- 
  - httpVersion

- 
  - remoteAddress

- 
  - headers{}

- 
  - args{}

- 
  - variables{}

- 
  - log()

- 

+res

- 
  - status

- 
  - headers{}

- 
  - contentType

- 
  - contentLength

- 
  - sendHeader()

- 
  - send()

- 
  - finish()  
-Example

* * *

- 

-Create nginx.conf:  
+Example nginx.conf:  
worker\_processes 1;  
pid logs/nginx.pid;  
@@ -47,79 +57,132 @@ Create nginx.conf:  
}  
http {

- 

```
   js_set $summary "

```

- 

```
       var a, s, h;

```

- 
- 

```
       s = 'JS summary\n\n';

```

- 
- 

```
       s += 'Method: ' + $r.method + '\n';

```

- 

```
       s += 'HTTP version: ' + $r.httpVersion + '\n';

```

- 

```
       s += 'Host: ' + $r.headers.host + '\n';

```

- 

```
       s += 'Remote Address: ' + $r.remoteAddress + '\n';

```

- 

```
       s += 'URI: ' + $r.uri + '\n';

```

- 
- 

```
       s += 'Headers:\n';

```

- 

```
       for (h in $r.headers) {

```

- 

```
           s += ' header \"' + h + '\" is \"' + $r.headers[h]

```

- ‘"\n’;

- 

```
       }

```

- 
- 

```
       s += 'Args:\n';

```

- 

```
       for (a in $r.args) {

```

- 

```
           s += ' arg \"' + a + '\" is \"' + $r.args[a] + '\"\n';

```

- 

```
       }

```

- 
- 

```
       s;

```

- 

```
       ";

```

- 

```
   # include JavaScript file

```

- 

```
   js_include js-http.js;
    server {
       listen 8000;
        location / {

```

- 

```
           js_run "

```

- 

```
               var res;

```

- 

```
               res = $r.response;

```

- 

```
               res.headers.foo = 1234;

```

- 

```
               res.status = 302;

```

- 

```
               res.contentType = 'text/plain; charset=utf-8';

```

- 

```
               res.contentLength = 15;

```

- 

```
               res.sendHeader();

```

- 

```
               res.send('nginx');

```

- 

```
               res.send('java');

```

- 

```
               res.send('script');

```

- 

```
               res.finish();

```

- 

```
               ";

```

- 

```
           # create $foo variable and set JavaScript function

```

foo()

- 

```
           # from the included JavaScript file as its handler

```

- 

```
           js_set $foo foo;

```

- 
- 

```
           add_header X-Foo $foo;

```

- 
- 

```
           # register JavaScript function bar() as content handler

```

- 

```
           js_content baz;
       }
        location /summary {

```

- 

```
           js_set $summary summary;

```

- 

```
           return 200 $summary;
       }
   }

```

}  
-Run nginx & test the output:

- 

## -$ curl 127.0.0.1:8000

## -nginxjavascript

## -$ curl -H “Foo: 1099” ‘127.0.0.1:8000/summary?a=1&fooo=bar&zyx=xyz’

-JS summary  
-Method: GET  
-HTTP version: 1.1  
-Host: 127.0.0.1:8000  
-Remote Address: 127.0.0.1  
-URI: /summary  
-Headers:

- header “Host” is “127.0.0.1:8000”
- header “User-Agent” is “curl/7.43.0”
- header “Accept” is “_/_”
- header “Foo” is “1099”  
-Args:
- arg “a” is “1”
- arg “fooo” is “bar”
- arg “zyx” is “xyz”  
+js-http.js:

- 
- function foo(req, res) {
- 

```
   req.log("hello from foo() handler");

```

- 

```
   return "foo";

```

- }
- 
- function summary(req, res) {
- 

```
   var a, s, h;

```

- 
- 

```
   s = "JS summary\n\n";

```

- 
- 

```
   s += "Method: " + req.method + "\n";

```

- 

```
   s += "HTTP version: " + req.httpVersion + "\n";

```

- 

```
   s += "Host: " + req.headers.host + "\n";

```

- 

```
   s += "Remote Address: " + req.remoteAddress + "\n";

```

- 

```
   s += "URI: " + req.uri + "\n";

```

- 
- 

```
   s += "Headers:\n";

```

- 

```
   for (h in req.headers) {

```

- 

```
       s += " header '" + h + "' is '" + req.headers[h] + "'\n";

```

- 

```
   }

```

- 
- 

```
   s += "Args:\n";

```

- 

```
   for (a in req.args) {

```

- 

```
       s += " arg '" + a + "' is '" + req.args[a] + "'\n";

```

- 

```
   }

```

- 
- 

```
   return s;

```

- }
- 
- function baz(req, res) {
- 

```
   res.headers.foo = 1234;

```

- 

```
   res.status = 200;

```

- 

```
   res.contentType = "text/plain; charset=utf-8";

```

- 

```
   res.contentLength = 15;

```

- 

```
   res.sendHeader();

```

- 

```
   res.send("nginx");

```

- 

```
   res.send("java");

```

- 

```
   res.send("script");

```

- 
- 

```
   res.finish();

```

- }
- 
- 

+Stream JavaScript module  
±-----------------------  
+  
+Each Stream JavaScript handler receives one argument - stream  
session object.  
+

- function foo(s) {
- 

```
   ..

```

- }
- 

+The following properties are available in the session object:  
+

- 

```
- remoteAddress

```

- 

```
- variables{}

```

- 

```
- log()

```

- 
- 

+Example nginx.conf:  
+

- worker\_processes 1;
- pid logs/nginx.pid;
- 
- events {
- 

```
   worker_connections 256;

```

- }
- 
- stream {
- 

```
   # include JavaScript file

```

- 

```
   js_include js-stream.js;

```

- 
- 

```
   server {

```

- 

```
       listen 8000;

```

- 
- 

```
       # create $foo and $bar variables and set JavaScript

```

- 

```
       # functions foo() and bar() from the included JavaScript

```

- 

```
       # file as their handlers

```

- 

```
       js_set $foo foo;

```

- 

```
       js_set $bar bar;

```

- 
- 

```
       return $foo-$bar;

```

- 

```
   }

```

- }
- 
- 

+js-stream.js:  
+

- function foo(s) {
- 

```
   s.log("hello from foo() handler!");

```

- 

```
   return s.remoteAddress;

```

- }
- 
- function bar(s) {
- 

```
   var v = s.variables;

```

- 

```
   s.log("hello from bar() handler!");

```

- 

```
   return "foo-var" + v.remote_port + "; pid=" + v.pid;

```

- }  
–

* * *

nginx-devel mailing list  
removed\_email\_address@domain.invalid  
[http://mailman.nginx.org/mailman/listinfo/nginx-devel](http://mailman.nginx.org/mailman/listinfo/nginx-devel)

–  
Maxim K.
