Как передать значение переменной из файла js в конфигурацию nginx с помощью модуля njs

Я пытаюсь использовать njs для цепного запроса с nginx njs, у меня ниже проблема, вот мой файл javascript, и мой сценарий: у меня есть два API. Я хочу запросить первый API и получить его ответ, а затем добавить первый ответ API (облако - свойства JSON) второй заголовок API

      async function chain(r) {
  r.headersOut["Content-Type"] = "application/json";
  var result = await r.subrequest("/validation", { method: "POST" });
  var json = JSON.parse(result.responseText);

  headers = json.fullName;// where to put this header and append it to second request header ?
  var result1 = await r.subrequest("/persistance");

  r.return(result1.status, result1.responseBody);

}

function getHeaders() {
  return headers;
}

export default { chain, getHeaders };

И мой файл конфигурации nginx

      js_import http.js;
js_set $headers http.getHeaders; // here am trying to get headers from variable in http.js but is it alwat null and undefended
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
       
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
       
    location ~ ^/.*$ {
      js_content http.chain;
    }

    location = /persistance {
       proxy_set_header accountId $headers; //it is always undefined, I think it is because declared on the top of file and it is nginx directives
       proxy_pass http://192.168.2.76:5001/academicyear/list;      
    }
     
    location = /validation {
       proxy_pass http://192.168.2.76:8088/v1/user/validation;
    }

}

Я использую подзапрос, и тогда была та же проблема

1 ответ

Этот комментарий может быть ответом.

nginx не поддерживает асинхронные операции (это не связано с ключевым словом async в JavaScript) в своих обработчиках переменных. Когда nginx запрашивает значение какой-либо переменной (скажем, $x_js_log), он находит ее и вызывает свой обработчик (js_log). Nginx не может блокировать здесь и хочет получить результат сразу. r.subrequest() по своей природе является асинхронной операцией.

https://github.com/nginx/njs/issues/287#issuecomment-584247289

Другие вопросы по тегам