Mercurial > hg > nginx-site
view xml/en/docs/http/ngx_http_js_module.xml @ 1896:b93b0689f13b
Fixed stream nginScript module example.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 31 Jan 2017 16:10:44 +0300 |
parents | 621daf1b77d0 |
children | 0227aa9b87de |
line wrap: on
line source
<?xml version="1.0"?> <!-- Copyright (C) Nginx, Inc. --> <!DOCTYPE module SYSTEM "../../../../dtd/module.dtd"> <module name="Module ngx_http_js_module" link="/en/docs/http/ngx_http_js_module.html" lang="en" rev="5"> <section id="summary"> <para> The <literal>ngx_http_js_module</literal> module is used to implement location and variable handlers in <link doc="../njs_about.xml">nginScript</link> — a subset of the JavaScript language. </para> <para> This module is not built by default, it should be compiled with the nginScript module using the <literal>--add_module</literal> configuration parameter: <example> ./configure --add-module=<value>path-to-njs</value>/nginx </example> The <link url="http://hg.nginx.org/njs">repository</link> with the nginScript module can be cloned with the following command (requires <link url="https://www.mercurial-scm.org">Mercurial</link> client): <example> hg clone http://hg.nginx.org/njs </example> This module can also be built as <link doc="../ngx_core_module.xml" id="load_module">dynamic</link>: <example> ./configure --add-dynamic_module=<value>path-to-njs</value>/nginx </example> </para> </section> <section id="issues" name="Known Issues"> <para> The module is experimental, caveat emptor applies. </para> </section> <section id="example" name="Example Configuration"> <para> <example> js_include http.js; js_set $foo foo; js_set $summary summary; server { listen 8000; location / { add_header X-Foo $foo; js_content baz; } location /summary { return 200 $summary; } } </example> </para> <para> The <path>http.js</path> file: <example> 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(); } </example> </para> </section> <section id="directives" name="Directives"> <directive name="js_include"> <syntax><value>file</value></syntax> <default/> <context>http</context> <para> Specifies a file that implements location and variable handlers in nginScript. </para> </directive> <directive name="js_content"> <syntax><value>function</value></syntax> <default/> <context>location</context> <context>limit_except</context> <para> Sets an nginScript function as a location content handler. </para> </directive> <directive name="js_set"> <syntax> <value>$variable</value> <value>function</value></syntax> <default/> <context>http</context> <para> Sets an nginScript function for the specified variable. </para> </directive> </section> <section id="arguments" name="Request and Response Arguments"> <para> Each HTTP nginScript handler receives two arguments, request and response. </para> <para> The request object has the following properties: <list type="tag"> <tag-name><literal>uri</literal></tag-name> <tag-desc> current URI in a request, read-only </tag-desc> <tag-name><literal>method</literal></tag-name> <tag-desc> request method, read-only </tag-desc> <tag-name><literal>httpVersion</literal></tag-name> <tag-desc> HTTP version, read-only </tag-desc> <tag-name><literal>remoteAddress</literal></tag-name> <tag-desc> client address, read-only </tag-desc> <tag-name><literal>headers{}</literal></tag-name> <tag-desc> request headers object, read-only. <para> For example, the <literal>Header-Name</literal> header can be accessed with the syntax <literal>headers['Header-Name']</literal> or <literal>headers.Header_name</literal> </para> </tag-desc> <tag-name><literal>args{}</literal></tag-name> <tag-desc> request arguments object, read-only </tag-desc> <tag-name><literal>variables{}</literal></tag-name> <tag-desc> nginx variables object, read-only </tag-desc> <tag-name><literal>log(<value>string</value>)</literal></tag-name> <tag-desc> writes a <literal>string</literal> to the error log </tag-desc> </list> </para> <para> The response object has the following properties: <list type="tag"> <tag-name><literal>status</literal></tag-name> <tag-desc> response status, writable </tag-desc> <tag-name><literal>headers{}</literal></tag-name> <tag-desc> response headers object </tag-desc> <tag-name><literal>contentType</literal></tag-name> <tag-desc> the response <header>Content-Type</header> header field value, writable </tag-desc> <tag-name><literal>contentLength</literal></tag-name> <tag-desc> the response <header>Content-Length</header> header field value, writable </tag-desc> </list> </para> <para> The response object has the following methods: <list type="tag"> <tag-name><literal>sendHeader()</literal></tag-name> <tag-desc> sends the HTTP header to the client </tag-desc> <tag-name><literal>send(<value>string</value>)</literal></tag-name> <tag-desc> sends a part of the response body to the client </tag-desc> <tag-name><literal>finish()</literal></tag-name> <tag-desc> finishes sending a response to the client </tag-desc> </list> </para> </section> </module>