Как передать значение переменной из файла 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