Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Na první pohled
Cílem: Konfigurace Node.js aplikací pro použití dev Proxy
Čas: 10 minut
Požadavky:Nastavení dev proxy, Node.js aplikace
Způsob směrování Node.js požadavků prostřednictvím dev Proxy závisí na vaší Node.js verzi a knihovně, kterou používáte k provádění požadavků HTTP. Nedávné verze Node.js můžou směrovat nativní fetch rozhraní API a http a https moduly prostřednictvím proxy serveru definovaného v proměnných prostředí. Pro starší Node.js verze a pro jiné knihovny nakonfigurujete proxy server v kódu nebo pomocí global-agent balíčku povolíte podporu proxy serveru s minimálními změnami kódu.
Bez ohledu na to, jaký přístup použijete, Node.js musí důvěřovat kořenovému certifikátu dev Proxy, aby bylo možné provádět požadavky HTTPS prostřednictvím dev proxy serveru. Další informace najdete v tématu Důvěřovat certifikátu Dev Proxy.
Důvěřovat certifikátu dev proxy serveru
Node.js ve výchozím nastavení nepoužívá úložiště certifikátů operačního systému, takže nedůvěřuje kořenovému certifikátu dev Proxy ani po tom, co mu důvěřujete ve svém počítači. Místo zakázání ověřování certifikátu přidejte kořenový certifikát Dev Proxy mezi certifikáty, kterým Node.js důvěřuje, pomocí proměnné prostředí NODE_EXTRA_CA_CERTS.
NODE_EXTRA_CA_CERTS vyžaduje certifikát ve formátu PEM. Zatímco běží Dev Proxy, získejte token rozhraní API pomocí devproxy api token a stáhněte kořenový certifikát ve formátu PEM pomocí Dev Proxy API:
TOKEN=$(devproxy api token)
curl -H "Authorization: Bearer $TOKEN" -o dev-proxy-ca.pem "http://127.0.0.1:8897/proxy/rootCertificate?format=crt"
Pokud používáte PowerShell, spusťte:
$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"
Pak při spuštění aplikace nasměrujte proměnnou NODE_EXTRA_CA_CERTS prostředí na stažený soubor:
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node index.js
Node.js čte NODE_EXTRA_CA_CERTS pouze při spuštění procesu, takže ho nemůžete nastavit z kódu. Každá instalace dev proxy používá svůj vlastní kořenový certifikát. Pokud certifikát znovu vytvoříte, například pomocí devproxy cert remove a devproxy cert ensure, stáhněte jej znovu.
Nativní rozhraní API pro načtení Node.js
Počínaje Node.js v24.0.0 a v22.21.0 může nativní fetch rozhraní API používat proxy server definovaný v proměnných prostředí HTTP_PROXY, HTTPS_PROXY a NO_PROXY. Počínaje Node.js v24.5.0 a v22.21.0 platí totéž pro moduly http a https moduly. Node.js tyto proměnné ignoruje, pokud nepovolíte podporu proxy serveru nastavením proměnné prostředí NODE_USE_ENV_PROXY na 1 nebo spuštěním Node.js s příznakem --use-env-proxy.
Nemusíte měnit kód tak, aby používal Dev Proxy s nativním fetch rozhraním API:
(async () => {
const result = await fetch('https://jsonplaceholder.typicode.com/posts');
const jsonResult = await result.json();
console.log(JSON.stringify(jsonResult, null, 2));
})();
Při spuštění aplikace povolte podporu proxy serveru, jako proxy zadejte Dev Proxy a důvěřujte kořenovému certifikátu Dev Proxy:
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
Případně použijte příznak --use-env-proxy místo proměnné prostředí NODE_USE_ENV_PROXY:
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
Integrovaná podpora proxy serveru je v aktivním vývoji v Node.js. Pokud chcete zkontrolovat, jestli vaše verze Node.js toto podporuje, spusťte příkaz node --version. Pokud používáte starší verzi, použijte undici balíček nebo global-agent balíček, jak je popsáno v následujících částech.
Použití nativního fetch API se staršími verzemi Node.js
Pokud používáte Node.js verzi, která nepodporuje NODE_USE_ENV_PROXY, použijte EnvHttpProxyAgent balíček undici , který implementuje nativní fetch rozhraní API v Node.js.
EnvHttpProxyAgent načte proxy server z proměnných prostředí HTTP_PROXY, HTTPS_PROXY a NO_PROXY. Nastavte ho jako globální dispečer na začátku aplikace:
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));
})();
Při spuštění aplikace zadejte Dev Proxy jako proxy server a důvěřujte kořenovému certifikátu Dev Proxy:
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 je oblíbená knihovna, která poskytuje globálního agenta HTTP/HTTPS pro Node.js. Umožňuje zadat proxy pomocí proměnných prostředí. Výhodou použití global-agent je, že při používání Dev Proxy nemusíte měnit způsob vydávání požadavků HTTP ve vaší aplikaci.
Tady je příklad použití global-agent v aplikaci Node.js, která používá node-fetch:
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));
})();
Tady je postup global-agent použití s Node.js a standardním https modulem:
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);
});
});
Při spuštění aplikace zadejte proxy pomocí GLOBAL_AGENT_HTTP_PROXY proměnné prostředí a důvěřujte kořenovému certifikátu Dev Proxy.
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
Node-fetch je oblíbená knihovna, která poskytuje fetch implementaci pro Node.js.
node-fetch nepodporuje zadávání proxy serveru pomocí proměnných prostředí. Místo toho musíte vytvořit vlastního agenta a předat ho metodě fetch .
Tady je příklad použití node-fetch s dev Proxy definováním agenta pomocí https-proxy-agent balíčku.
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));
})();
Při spuštění aplikace důvěřujte kořenovému certifikátu Dev Proxy serveru:
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node index.js
Axios
Axios je další oblíbená knihovna pro vytváření požadavků HTTP v Node.js. Axios umožňuje zadat proxy pomocí proměnných prostředí nebo určit agenta přímo v konfiguraci požadavku.
Použít Axios a Dev Proxy s proměnnými prostředí
Pokud používáte Dev Proxy s Axios a zadáváte proxy pomocí proměnných prostředí, nemusíte měnit kód. Stačí nastavit https_proxy proměnnou prostředí a Axios ji použije k provádění požadavků.
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));
})();
Zadejte proměnnou prostředí https_proxy globálně nebo při spuštění aplikace a důvěřujte kořenovému certifikátu Dev Proxy.
https_proxy=http://127.0.0.1:8000 NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node axios.mjs
Dostal
node-fetch
Podobně jako , Got nepodporuje zadávání proxy pomocí proměnných prostředí. Místo toho je potřeba vytvořit vlastního agenta a předat ho žádosti.
Tady je příklad použití funkce Got with Dev Proxy:
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));
})();
Při spuštění aplikace potvrďte důvěru kořenovému certifikátu Dev Proxy:
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node got.mjs
Superagent
SuperAgent nepodporuje zadávání proxy serveru pomocí proměnných prostředí. Pokud chcete používat Dev Proxy s SuperAgent, musíte nainstalovat superagent-proxy modul plug-in a nakonfigurovat proxy pomocí proxy metody.
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));
})();
Při spuštění aplikace důvěřujte kořenovému certifikátu Dev Proxy serveru:
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node superagent.js
Známé problémy
Pokud používáte dev Proxy se službou Node.js, můžou nastat následující problémy.
Chyba UNABLE_TO_VERIFY_LEAF_SIGNATURE
Když s Node.js používáte Dev Proxy, zobrazí se podobná chyba:
/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'
}
Tato chyba znamená, že Node.js nedůvěřuje kořenovému certifikátu dev proxy. Pokud chcete tento problém vyřešit, stáhněte si kořenový certifikát dev proxy a nastavte NODE_EXTRA_CA_CERTS proměnnou prostředí na cestu ke staženého souboru při spuštění aplikace. Další informace najdete v tématu Důvěřovat certifikátu Dev Proxy.
NODE_EXTRA_CA_CERTS=./dev-proxy-ca.pem node index.js
Warning
Vyhněte se nastavení NODE_TLS_REJECT_UNAUTHORIZED na 0, abyste obešli tuto chybu. Zakáže ověřování certifikátů pro všechny požadavky HTTPS, které vaše aplikace provádí.
Viz také
- Použití Dev Proxy s aplikacemi Node.js v kontejnerech Dockeru – nastavení Dockeru
- Použití vývojářského proxy serveru s funkcemi Azure JavaScript – Azure Functions
- Glosář – terminologie dev proxy