summaryrefslogtreecommitdiffhomepage
path: root/src/nodejs (follow)
AgeCommit message (Collapse)AuthorFilesLines
2024-02-20Add additional replace rules for node:* modulesGabor Javorszky2-0/+4
In that particular issue the compiled nuxt files end up importing the http module as node:http rather than http only. This bypasses unit's custom loader implementation which only check for the http or unit-http modules, and their websocket counterparts. This changeset adds replace sources for both the node:http and node:websocket import signatures. Closes: https://github.com/nginx/unit/issues/1013 Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
2024-02-19Node.js: Use console.warn instead of stderr.writeDan Callahan1-2/+1
Functionally identical, but marginally more idiomatic. Refines: fbeb2065b180e2376088387ee150d3975dc08cd5
2024-02-14fix: Take options as well as requestListener (#1091)Gabor Javorszky2-3/+11
* Take options as well as requestListener Unit-http have not kept up with the signature of nodejs's http package development. Nodejs allows an optional `options` object to be passed to the `createServer` function, we didn't. This resulted in function signature errors when user code that did make use of the options arg tried to call unit's replaced function. This change changes the signature to be more in line with how nodejs does it discarding it and printing a message to stdout. * Add test file to start node application with options * Add changes to docs/changes.xml Closes: https://github.com/nginx/unit/issues/1043
2024-01-26Node.js: fixed "httpVersion" variable formatAndrei Zeliankou1-1/+7
According to the Node.js documenation this variable should only include numbering scheme. Thanks to @dbit-xia. Closes: https://github.com/nginx/unit/issues/1085
2024-01-16White space formatting fixesAndrei Zeliankou2-8/+8
Closes: <https://github.com/nginx/unit/pull/1062>
2023-11-17Node.js: ServerResponse.flushHeaders() implemented.Andrei Zeliankou1-0/+4
This closes #1006 issue on GitHub. Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
2023-09-26Node.js: provide reasonable default paths for macOS.Konstantin Pavlov1-3/+22
2023-09-26Node.js: ServerRequest.destroy() implemented.Andrei Zeliankou1-0/+9
This closes #871 issue on GitHub.
2023-09-26Node.js: response body chunk can now be a Uint8Array.Andrei Zeliankou1-2/+5
Starting from Node.js 15.0.0 the chunk parameter of the response.write() can be a Uint8Array. This closes #870 issue on GitHub.
2023-03-29Auto: mirroring installation structure in build tree.Alejandro Colomar1-1/+1
This makes the build tree more organized, which is good for adding new stuff. Now, it's useful for example for adding manual pages in man3/, but it may be useful in the future for example for extending the build system to run linters (e.g., clang-tidy(1), Clang analyzer, ...) on the C source code. Previously, the build tree was quite flat, and looked like this (after `./configure && make`): $ tree -I src build build ├── Makefile ├── autoconf.data ├── autoconf.err ├── echo ├── libnxt.a ├── nxt_auto_config.h ├── nxt_version.h ├── unitd └── unitd.8 1 directory, 9 files And after this patch, it looks like this: $ tree -I src build build ├── Makefile ├── autoconf.data ├── autoconf.err ├── bin │ └── echo ├── include │ ├── nxt_auto_config.h │ └── nxt_version.h ├── lib │ ├── libnxt.a │ └── unit │ └── modules ├── sbin │ └── unitd ├── share │ └── man │ └── man8 │ └── unitd.8 └── var ├── lib │ └── unit ├── log │ └── unit └── run └── unit 17 directories, 9 files It also solves one issue introduced in 5a37171f733f ("Added default values for pathnames."). Before that commit, it was possible to run unitd from the build system (`./build/unitd`). Now, since it expects files in a very specific location, that has been broken. By having a directory structure that mirrors the installation, it's possible to trick it to believe it's installed, and run it from there: $ ./configure --prefix=./build $ make $ ./build/sbin/unitd Fixes: 5a37171f733f ("Added default values for pathnames.") Reported-by: Liam Crilly <liam@nginx.com> Reviewed-by: Konstantin Pavlov <thresh@nginx.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Cc: Andrei Zeliankou <zelenkov@nginx.com> Cc: Zhidao Hong <z.hong@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2022-12-06Node.js: added "shortCircuit" option for ES modules hook.Andrei Zeliankou1-2/+4
Starting from Node.js v18.6.0 return value from all hooks must have "shortCircuit: true" option specified. For more information see: https://github.com/nodejs/node/commit/10bcad5c6e
2022-10-03Renamed a couple of members of nxt_unit_request_t.Andrew Clayton1-1/+2
This is a preparatory patch that renames the 'local' and 'local_length' members of the nxt_unit_request_t structure to 'local_addr' and 'local_addr_length' in preparation for the adding of 'local_port' and 'local_port_length' members. Suggested-by: Zhidao HONG <z.hong@f5.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2022-06-02Node.js: fixed ES modules format in loader.mjs.Andrei Zeliankou1-2/+2
Before Node.js v16.14.0 the "format" value in defaultResolve was ignored so error was hidden. For more information see: https://github.com/nodejs/node/pull/40980
2021-10-28Moving request limit control to libunit.Max Romanov2-3/+4
Introducting application graceful stop. For now only used when application process reach request limit value. This closes #585 issue on GitHub.
2021-06-15Node.js: improving and test packaging.Max Romanov1-22/+0
The patch removes the "files" section from package.json to avoid future issues with missing files. For package testing purposes, 'npm pack' is used instead of plain 'tar' to simulate packaging more accurately.
2021-06-02Node.js: packaging new loader.js and loader.mjs.Max Romanov1-0/+2
The files loader.js and loader.mjs (introduced in f85b85094541 and 3c551b9721df) were added to the packaged files list.
2021-05-24Node.js: renamed "require_shim" to "loader".Oisin Canty2-2/+2
2021-05-12Node.js: a shim for overriding "http" and "websocket" modules.Oisin Canty4-12/+72
Also added stubs for Server.address() This was done to prevent crashes in some popular frameworks like express Supports both CommonJS and the new ES Modules system syntax e.g: app.js: const http = require('http') app.mjs: import http from "http" Usage on Node 14.16.x and higher: { "type": "external", "processes": {"spare": 0}, "working_directory": '/project', "executable": "/usr/bin/env", "arguments": [ "node", "--loader", "unit-http/require_shim.mjs" "--require", "unit-http/require_shim", "app.js" ] } Usage on Node 14.15.x and lower: { "type": "external", "processes": {"spare": 0}, "working_directory": '/project', "executable": "/usr/bin/env", "arguments": [ "node", "--require", "unit-http/require_shim", "app.js" ] }
2021-03-25Node.js: used distinct placeholder for version in "package.json".Valentin Bartenev1-1/+1
This makes the "sed" instruction simpler and more portable, as the previous variant didn't work well on BSD systems due to the "\s" metacharacter. Thanks to Sergey A. Osokin <osa@FreeBSD.org.ru> for spotting this issue. Also, this should prevent accidentally creating a version 1.0.0 package.
2020-12-29Libunit: processing single port message.Max Romanov1-43/+133
This partially reverts the optimisation introduced in 1d84b9e4b459 to avoid an unpredictable block in nxt_unit_process_port_msg(). Under high load, this function may never return control to its caller, and the external event loop (in Node.js and Python asyncio) won't be able to process other scheduled events. To reproduce the issue, two request processing types are needed: 'fast' and 'furious'. The 'fast' one simply returns a small response, while the 'furious' schedules asynchronous calls to external resources. Thus, if Unit is subjected to a large amount of 'fast' requests, the 'furious' request processing freezes until the high load ends. The issue was found by Wu Jian Ping (@wujjpp) during Node.js stream implementation discussion and relates to PR #502 on GitHub.
2020-12-29Node.js: ServerRequest and ServerResponse compliance to Stream API.Max Romanov3-44/+87
ServerRequest now inherit stream Readable object. ServerResponse provides 'writable' property. Thanks to Wu Jian Ping (@wujjpp). This closes #274, closes #317 issues and closes #502 PR on GitHub.
2020-12-07Node.js: avoided use of request struct for debug logging.Max Romanov1-3/+3
This fixes a crash on exit of Node.js application. The crash reproduced on Ubuntu 20.10 with Node.js v15.1.0. Tests 'test_node_websockets_two_clients' and 'test_node_websockets_7_13_1__7_13_2'. The reason of the crash is using request struct which was already freed. The issue was introduced in 5be509fda29e.
2020-11-30Node.js: removing unnecessary warnings.Max Romanov1-18/+6
Warnings changed for debug messages.
2020-11-18Libunit: closing active requests on quit.Max Romanov1-0/+2
2020-08-11Introducing the shared application port.Max Romanov1-13/+9
This is the port shared between all application processes which use it to pass requests for processing. Using it significantly simplifies the request processing code in the router. The drawback is 2 more file descriptors per each configured application and more complex libunit message wait/read code.
2020-08-11Libunit refactoring: port management.Max Romanov2-25/+23
- Changed the port management callbacks to notifications, which e. g. avoids the need to call the libunit function - Added context and library instance reference counts for a safer resource release - Added the router main port initialization
2020-08-07Node.js: correct port data memory release.Max Romanov1-1/+15
According to libuv documentation, uv_poll_t memory should be released in a callback function passed to uv_close(). Otherwise, the Node.js application process may crash at exit.
2020-04-08Node.js: fixing Server.listen() method.Max Romanov1-1/+11
This is required for Express framework compatibility. This closes #418 issue on GitHub.
2020-03-03Node.js: fixing x86 warning about the signed/unsigned comparison.Max Romanov1-2/+1
2020-01-28Node.js: suppress compilation warning.Max Romanov1-1/+1
2019-12-24Node.js: implementing output message drain using SHM_ACK feature.Max Romanov3-26/+188
ServerResponse.write() method tries to write data buffer using libunit and stores buffers to write in a Server-wide output queue, which is processed in response to SHM_ACK message from router. As a side effect 'drain' event implemented and socket.writable flag reflect current state.
2019-11-11Fixing libunit 'off by 2' issue in library.Max Romanov1-9/+12
Name and value in each header are 0-terminated, so additional 2 bytes should be allocated for them. There were several attempts to add these 2 bytes to headers in language modules, but some modules weren't updated. Also, adding these 2 bytes is specific to the implementation which may be changed later, so extending this mechanics to modules may cause errors.
2019-08-20Node.js: introducing websocket support.Max Romanov15-175/+2373
2019-08-06Node.js: returning "this" from writeHead() to allow chaining.Valentin Bartenev1-0/+2
In Node.js version 11.10.0 and later, the writeHead() function returns "this".
2019-06-17Node.js: packaging new nxt_napi.h.Max Romanov1-0/+1
File nxt_napi.h (introduced in 53533ba0097c) added into packaged files list. This closes #261 issue on GitHub.
2019-04-17Node.js: using low-case header names as key in req.headers.Max Romanov1-4/+17
Node.js modules (body-parser, row-body) search low-cased names ('content-length', 'content-type' etc.) to properly assemble request body. This closes #246 issue on GitHub.
2019-04-03Backed out changeset f74d4dd9c3db.Valentin Bartenev1-0/+8
This closes #240 issue on GitHub.
2019-04-02Removing unused variables and assignments.Max Romanov1-8/+5
Warnings introduced in 53533ba0097c commit.
2019-04-01Adding 'connection' to request as an alias to 'socket'.Max Romanov1-4/+11
Adding actual 'remoteAddress' and 'localAddress' into socket object. This closes #232 issue on GitHub.
2019-04-01Introducing close event to notify about server stop.Max Romanov2-0/+25
This closes #236 on GitHub. Thanks to 0xcdcdcdcd.
2019-04-01Adding syntax sugar.Max Romanov5-654/+882
With exceptions and overloads.
2019-03-11Style.Andrey Zelenkov1-1/+1
2019-02-22Improvement and unification of version processing in build scripts.Alexander Borisov1-1/+1
This also eliminates expressions that incompatible with BSD make, thus fixing installation of Node.js module on FreeBSD (broken by dace60fc4926).
2018-12-19Node.js: removed value checking for headers.Alexander Borisov1-8/+0
2018-12-19Node.js: removed unused _implicitHeader() function.Alexander Borisov1-5/+0
2018-12-19Node.js: added check for libunit version at compile time.Alexander Borisov2-6/+12
2018-12-19libunit: added generation of version header file.Alexander Borisov1-1/+1
2018-12-19Node.js: checking for exception after running JS code from C++.Alexander Borisov1-3/+20
2018-12-19Node.js: checking uniqueness of HTTP headers for different case.Alexander Borisov2-24/+62
2018-12-19Node.js: calling write callback asynchronously.Alexander Borisov1-1/+13