[njs] Fetch: generalize ngx_js_http_error().

noreply at nginx.com noreply at nginx.com
Fri Apr 11 15:29:01 UTC 2025


details:   https://github.com/nginx/njs/commit/48070f44bd9d44dfd92a8f7873c38bf252d53b45
branches:  master
commit:    48070f44bd9d44dfd92a8f7873c38bf252d53b45
user:      Zhidao HONG <z.hong at f5.com>
date:      Fri, 11 Apr 2025 21:47:52 +0800
description:
Fetch: generalize ngx_js_http_error().

Refactored to support both njs and QuickJS, which have different error
formats when throwing exceptions.

---
 nginx/ngx_js_fetch.c | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/nginx/ngx_js_fetch.c b/nginx/ngx_js_fetch.c
index a803ab4c..2db73904 100644
--- a/nginx/ngx_js_fetch.c
+++ b/nginx/ngx_js_fetch.c
@@ -156,17 +156,6 @@ struct ngx_js_http_s {
 };
 
 
-
-
-#define ngx_js_http_error(http, fmt, ...)                                     \
-    do {                                                                      \
-        njs_vm_error((http)->vm, fmt, ##__VA_ARGS__);                         \
-        njs_vm_exception_get((http)->vm,                                      \
-                             njs_value_arg(&(http)->response_value));         \
-        ngx_js_http_fetch_done(http, &(http)->response_value, NJS_ERROR);     \
-    } while (0)
-
-
 static njs_int_t ngx_js_method_process(njs_vm_t *vm, ngx_js_request_t *r);
 static njs_int_t ngx_js_headers_inherit(njs_vm_t *vm, ngx_js_headers_t *headers,
     ngx_js_headers_t *orig);
@@ -1330,6 +1319,26 @@ failed:
 }
 
 
+static void
+ngx_js_http_error(ngx_js_http_t *http, const char *fmt, ...)
+{
+    u_char   *p, *end;
+    va_list   args;
+    u_char    err[NGX_MAX_ERROR_STR];
+
+    end = err + NGX_MAX_ERROR_STR - 1;
+
+    va_start(args, fmt);
+    p = njs_vsprintf(err, end, fmt, args);
+    *p = '\0';
+    va_end(args);
+
+    njs_vm_error(http->vm, (const char *) err);
+    njs_vm_exception_get(http->vm, njs_value_arg(&http->response_value));
+    ngx_js_http_fetch_done(http, &http->response_value, NJS_ERROR);
+}
+
+
 static void
 ngx_js_resolve_handler(ngx_resolver_ctx_t *ctx)
 {


More information about the nginx-devel mailing list