Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Egy pillantással
Cél: Node.js alkalmazások konfigurálása Dev Proxy használatára
Idő: 10 perc
Előfeltételek:Dev Proxy beállítása, Node.js alkalmazás
A Node.js kérések Dev Proxy-n keresztüli átirányításának menete a Node.js verziójától és a HTTP-kérések készítéséhez használt kódtártól függ. A legutóbbi Node.js verziók a natív fetch API-t és a http és https modulokat a környezeti változókban meghatározott proxyn keresztül irányíthatják. A régebbi Node.js verziókhoz és más kódtárakhoz konfigurálja a proxyt a kódban, vagy a global-agent csomag használatával minimális kódmódosításokkal engedélyezheti a proxytámogatást.
Bármelyik módszert is használja, a Node.js-nek meg kell bíznia a Dev Proxy főtanúsítványában, hogy HTTPS-kéréseket tudjon küldeni a Dev Proxyn keresztül. További információ: A Dev Proxy tanúsítvány megbízhatóként való megjelölése.
A fejlesztői proxy tanúsítványának megbízhatósága
A Node.js alapértelmezés szerint nem használja az operációs rendszer tanúsítványtárolóját, így még azután sem bízik meg a Dev Proxy főtanúsítványában, hogy megbízik benne a számítógépén. A tanúsítványérvényesítés letiltása helyett adja hozzá a Dev Proxy főtanúsítványát azokhoz a tanúsítványokhoz, amelyekben a Node.js megbízik, a NODE_EXTRA_CA_CERTS környezeti változó használatával.
NODE_EXTRA_CA_CERTS PEM formátumú tanúsítványt igényel. Amíg a Dev Proxy fut, szerezze be az API-tokent devproxy api token, és töltse le a gyökértanúsítványt PEM formátumban a Dev Proxy API használatával:
TOKEN=$(devproxy api token)
curl -H "Authorization: Bearer $TOKEN" -o dev-proxy-ca.pem "http://127.0.0.1:8897/proxy/rootCertificate?format=crt"
Ha a PowerShellt használja, futtassa a következőt:
$token = devproxy api token
Invoke-WebRequest -Headers @{ Authorization = "Bearer $token" } -OutFile dev-proxy-ca.pem -Uri "http://127.0.0.1:8897/proxy/rootCertificate?format=crt"
Ezután az alkalmazás indításakor állítsa a NODE_EXTRA_CA_CERTS környezeti változót a letöltött fájlra:
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node index.js
A Node.js csak a folyamat indításakor olvassa be a NODE_EXTRA_CA_CERTS értékét, így azt nem állíthatod be a kódból. Minden Dev Proxy-telepítés saját főtanúsítványt használ. Ha újra létrehozza a tanúsítványt, például a devproxy cert remove és devproxy cert ensure használatával, töltse le újra.
Natív Node.js api lekérése
A natív fetch API Node.js 24.0.0-s és 22.21.0-s verziótól kezdve használhatja a HTTP_PROXY, HTTPS_PROXYés NO_PROXY környezeti változókban definiált proxyt. A Node.js 24.5.0-s és 22.21.0-s verziótól kezdve ugyanez vonatkozik a https és http modulokra is. A Node.js figyelmen kívül hagyja ezeket a változókat, hacsak nem engedélyezi a proxytámogatást a NODE_USE_ENV_PROXY környezeti változó 1 értékre állításával vagy a Node.js --use-env-proxy jelölővel történő elindításával.
A dev proxy natív fetch API-val való használatához nem kell módosítania a kódot:
(async () => {
const result = await fetch('https://jsonplaceholder.typicode.com/posts');
const jsonResult = await result.json();
console.log(JSON.stringify(jsonResult, null, 2));
})();
Az alkalmazás indításakor engedélyezze a proxytámogatást, adja meg proxyként a Dev Proxyt, és bízzon a Dev Proxy főtanúsítványában:
NODE_USE_ENV_PROXY=1 HTTPS_PROXY=http://127.0.0.1:8000 HTTP_PROXY=http://127.0.0.1:8000 NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node index.js
Másik lehetőségként használja a --use-env-proxy jelzőt a NODE_USE_ENV_PROXY környezeti változó helyett:
HTTPS_PROXY=http://127.0.0.1:8000 HTTP_PROXY=http://127.0.0.1:8000 NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node --use-env-proxy index.js
Note
A beépített proxytámogatás aktív fejlesztés alatt áll a Node.js-ben. Annak ellenőrzéséhez, hogy a Node.js verziója támogatja-e, futtassa a következőt: node --version. Ha régebbi verziót használ, használja a undici csomagot vagy a global-agent csomagot az alábbi szakaszokban leírtak szerint.
A natív fetch API használata régebbi Node.js verziókkal
Ha olyan Node.js verziót használ, amely nem támogatja a NODE_USE_ENV_PROXY elemet, használja a(z) undici csomagból származó EnvHttpProxyAgent elemet, amely a natív fetch API-t valósítja meg a Node.js-ben. A HTTPS_PROXY, NO_PROXY és HTTP_PROXY környezeti változókból olvassa be a proxyt a EnvHttpProxyAgent. Állítsa be globális diszpécserként az alkalmazás indításakor:
import { EnvHttpProxyAgent, setGlobalDispatcher } from 'undici';
setGlobalDispatcher(new EnvHttpProxyAgent());
(async () => {
const result = await fetch('https://jsonplaceholder.typicode.com/posts');
const jsonResult = await result.json();
console.log(JSON.stringify(jsonResult, null, 2));
})();
Az alkalmazás indításakor proxyként adja meg a Dev Proxyt, és bízzon meg a Dev Proxy főtanúsítványában:
HTTPS_PROXY=http://127.0.0.1:8000 HTTP_PROXY=http://127.0.0.1:8000 NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node index.mjs
global-agent
global-agent egy népszerű kódtár, amely globális HTTP/HTTPS-ügynököt biztosít a Node.js számára. Lehetővé teszi a proxy környezeti változók használatával történő megadását. A global-agent használatának előnye, hogy nem kell módosítania, hogyan ad ki HTTP-kéréseket az alkalmazásában a Dev Proxy használatához.
Íme egy példa arra, hogyan használhatja a global-agent-t egy Node.js alkalmazásban, amely node-fetch-t használ.
import fetch from 'node-fetch';
import { bootstrap } from 'global-agent';
bootstrap();
(async () => {
const result = await fetch('https://jsonplaceholder.typicode.com/posts');
const jsonResult = await result.json();
console.log(JSON.stringify(jsonResult, null, 2));
})();
Az alábbiak szerint használhatja global-agent a Node.js-szal és a standard https modullal:
const https = require('https');
const globalAgent = require('global-agent');
globalAgent.bootstrap();
https.get('https://jsonplaceholder.typicode.com/posts', (resp) => {
let data = '';
resp.on('data', (d) => {
data += d;
});
resp.on('end', () => {
console.log(JSON.parse(data));
});
resp.on('error', (err) => {
console.error(err);
});
});
Az alkalmazás indításakor adja meg a proxyt a GLOBAL_AGENT_HTTP_PROXY környezeti változóval, és bízzon a dev proxy főtanúsítványában.
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node global-node-fetch.mjs
node-fetch
A node-fetch egy népszerű kódtár, amely implementációt fetch biztosít a Node.js számára.
node-fetch nem támogatja a proxy környezeti változók használatával történő megadását. Ehelyett létre kell hoznia egy egyéni ügynököt, és át kell adnia a fetch metódusnak.
Íme egy példa arra, hogyan használhatja a Dev Proxyt node-fetch az ügynök https-proxy-agent csomaggal történő definiálásával.
const fetch = require('node-fetch');
const { HttpsProxyAgent } = require('https-proxy-agent');
(async () => {
// Create a custom agent pointing to Dev Proxy
const agent = new HttpsProxyAgent('http://127.0.0.1:8000');
// Pass the agent to the fetch method
const result = await fetch('https://jsonplaceholder.typicode.com/posts', { agent });
const jsonResult = await result.json();
console.log(JSON.stringify(jsonResult, null, 2));
})();
Az alkalmazás indításakor bízzon meg a dev proxy főtanúsítványában:
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node index.js
Axios
Az Axios egy másik népszerű könyvtár HTTP-kérések küldésére Node.js-ben. Az Axios lehetővé teszi, hogy környezeti változók használatával adja meg a proxyt, vagy közvetlenül a kérelemkonfigurációban adja meg az ügynököt.
Az Axios és a Dev Proxy használata környezeti változókkal
Ha dev proxyt használ az Axiossal, és környezeti változók használatával adja meg a proxyt, nem kell módosítania a kódot. Mindössze annyit kell tennie, hogy beállítja a környezeti változót, és az https_proxy Axios azt használja a kérések teljesítéséhez.
import axios from 'axios';
(async () => {
const result = await axios.get('https://jsonplaceholder.typicode.com/posts');
const response = result.data;
console.log(JSON.stringify(response, null, 2));
})();
Globálisan vagy az alkalmazás indításakor adja meg a https_proxy környezeti változót, és bízzon a Dev Proxy főtanúsítványában.
https_proxy=http://127.0.0.1:8000 NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node axios.mjs
Megkapta
node-fetch
Ehhez hasonlóan a Got nem támogatja a proxy környezeti változók használatával történő megadását. Ehelyett létre kell hoznia egy egyéni ügynököt, és továbbítania kell azt a kérésnek.
Íme egy példa a Got with Dev Proxy használatára:
import got from 'got';
import { HttpsProxyAgent } from 'https-proxy-agent';
(async () => {
// Create a custom agent pointing to Dev Proxy
const agent = new HttpsProxyAgent('http://127.0.0.1:8000');
const result = await got('https://jsonplaceholder.typicode.com/posts', {
// Pass the agent to the request
agent: {
https: agent
}
}).json();
console.log(JSON.stringify(result, null, 2));
})();
Az alkalmazás indításakor bízzon meg a dev proxy főtanúsítványában:
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node got.mjs
Szuperagent
SuperAgent nem támogatja a proxy környezeti változók használatával történő megadását. Ha a Dev Proxyt a SuperAgenttel szeretné használni, telepítenie kell a superagent-proxy beépülő modult, és konfigurálnia kell a proxyt a proxy módszerrel.
const superagent = require('superagent');
require('superagent-proxy')(superagent);
(async () => {
const result = await superagent
.get('https://jsonplaceholder.typicode.com/posts')
.proxy('http://127.0.0.1:8000');
console.log(JSON.stringify(result.body, null, 2));
})();
Az alkalmazás indításakor bízzon meg a dev proxy főtanúsítványában:
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node superagent.js
Ismert problémák
Ha dev proxyt használ Node.js, az alábbi problémákat tapasztalhatja.
UNABLE_TO_VERIFY_LEAF_SIGNATURE hiba
Ha dev proxyt használ Node.js, a következőhöz hasonló hibaüzenet jelenik meg:
/Users/user/my-app/node_modules/node-fetch/lib/index.js:1501
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
^
FetchError: request to https://jsonplaceholder.typicode.com/posts failed, reason: unable to verify the first certificate
at ClientRequest.<anonymous> (/Users/user/my-app/node_modules/node-fetch/lib/index.js:1501:11)
at ClientRequest.emit (node:events:518:28)
at TLSSocket.socketErrorListener (node:_http_client:495:9)
at TLSSocket.emit (node:events:518:28)
at emitErrorNT (node:internal/streams/destroy:169:8)
at emitErrorCloseNT (node:internal/streams/destroy:128:3)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
type: 'system',
errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE',
code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
}
Ez a hiba azt jelenti, hogy Node.js nem bízik meg a dev proxy főtanúsítványában. A probléma megoldásához töltse le a Dev Proxy főtanúsítványát, és az alkalmazás indításakor állítsa a(z) NODE_EXTRA_CA_CERTS környezeti változót a letöltött fájl elérési útjára. További információ: Bízzon meg a Dev Proxy tanúsítványban.
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node index.js
Warning
Kerülje a(z) 0NODE_TLS_REJECT_UNAUTHORIZED értékre állítását a hiba megkerülése érdekében. Letiltja a tanúsítványérvényesítést az alkalmazás által küldött összes HTTPS-kérés esetében.
Lásd még
- Dev Proxy használata Node.js docker-tárolókban lévő alkalmazásokkal – Docker-beállítás
- Dev Proxy használata JavaScript Azure Functions használatával – Azure Functions
- Szószedet – Fejlesztői proxy terminológiája