njs-0.5.0

Dmitry Volyntsev xeioex at nginx.com
Wed Dec 2 10:54:06 UTC 2020


Hello,

I'm glad to announce a new release of NGINX JavaScript module (njs).

This release focuses mostly on adding Buffer support in nginx modules.

Buffer is a better alternative to string when working with arbitrary data
and especially with binary protocols, because JavaScript strings operate
on characters, not bytes. A character may take up to 4 bytes in UTF-8.
The new Buffer properties are not designed to replace the string ones,
but to be a better alternative for binary use cases.

Notable new features:
- r.rawVariables (nginx variables as a Buffer):
: function is_local(r) {
:    return r.rawVariables.binary_remote_addr
:           .equals(Buffer.from([127,0,0,1]));
: }

- r.requestBuffer (request body as a Buffer):
For a request with the following request body:
     '{"a":{"b":"BAR"}}'
: function get_slice_of_req_body(r) {
:     var body = r.requestBuffer;
:     var view = new DataView(body.buffer, 5, 11);
:     r.return(200, view);
: }
The response body will be:
     '{"b":"BAR"}'

- s.on() events now support new callbacks which receive
data chuck as Buffer, this is especially useful for
binary protocols.

You can learn more about njs:

- Overview and introduction: http://nginx.org/en/docs/njs/
- Using Babel to transpile JS code >= ES6 for njs 
https://github.com/jirutka/babel-preset-njs
- Using node modules with njs:
http://nginx.org/en/docs/njs/node_modules.html
- Writing njs code using TypeScript definition files:
    http://nginx.org/en/docs/njs/typescript.html

Feel free to try it and give us feedback on:

- Github: https://github.com/nginx/njs/issues
- Mailing list: http://mailman.nginx.org/mailman/listinfo/nginx-devel


Changes with njs 0.5.0                                         01 Dec 2020

     nginx modules:

     *) Feature: introduced global "ngx" object.
        The following methods were added:
          ngx.log(level, msg)

        The following properties were added:
          ngx.INFO,
          ngx.WARN,
          ngx.ERR.

     *) Feature: added support for Buffer object where string
        is expected.

     *) Feature: added Buffer version of existing properties.
        The following properties were added:
        r.requestBuffer (r.requestBody),
        r.responseBuffer (r.responseBody),
        r.rawVariables (r.variables),
        s.rawVariables (s.variables).

        The following events were added in stream module:
        upstream (upload),
        downstream (download).

     *) Improvement: added aliases to existing properties.
        The following properties were added:
        r.requestText (r.requestBody),
        r.responseText (r.responseBody).

     *) Improvement: throwing an exception in r.internalRedirect()
        for a subrequest.

     *) Bugfix: fixed promise r.subrequest() with error_page redirect.

     *) Bugfix: fixed promise events handling.

     Core:

     *) Feature: added TypeScript definitions for builtin
        modules.
        Thanks to Jakub Jirutka.

     *) Feature: tracking unhandled promise rejection.

     *) Feature: added initial iterator support.
        Thanks to Artem S. Povalyukhin.

     *) Improvement: TypeScript definitions are refactored.
        Thanks to Jakub Jirutka.

     *) Improvement: added forgotten support for
        Object.prototype.valueOf() in Buffer.from().

     *) Bugfix: fixed heap-use-after-free in JSON.parse().

     *) Bugfix: fixed heap-use-after-free in JSON.stringify().

     *) Bugfix: fixed JSON.stringify() for arrays resizable via
        getters.

     *) Bugfix: fixed heap-buffer-overflow for
        RegExp.prototype[Symbol.replace].

     *) Bugfix: fixed returned value for Buffer.prototype.write*
        functions.

     *) Bugfix: fixed querystring.stringify().
        Thanks to Artem S. Povalyukhin.

     *) Bugfix: fixed the catch handler for
        Promise.prototype.finally().

     *) Bugfix: fixed querystring.parse().



More information about the nginx mailing list