Dev Proxy gebruiken met Node.js toepassingen
Er is geen standaardmethode voor het inschakelen van proxy's voor Node.js toepassingen. Of u proxy kunt gebruiken, is afhankelijk van de bibliotheek die u gebruikt om HTTP-aanvragen te doen. Normaal gesproken moet u uw code bijwerken om de proxy te configureren. U kunt het global-agent
pakket echter gebruiken om proxyondersteuning in te schakelen voor uw Node.js toepassing met minimale codewijzigingen.
Systeemeigen Node.js API ophalen
In v17.5.0 introduceert Node.js experimentele ondersteuning voor de fetch
API. Helaas is deze API nog steeds beperkt en biedt geen ondersteuning voor het configureren van een proxy. Als u Dev Proxy wilt gebruiken met Node.js, moet u een andere bibliotheek gebruiken voor het maken van HTTP-aanvragen.
global-agent
global-agent
is een populaire bibliotheek die een globale HTTP/HTTPS-agent biedt voor Node.js. Hiermee kunt u de proxy opgeven met behulp van omgevingsvariabelen. Het voordeel van het gebruik global-agent
is dat u niet hoeft te wijzigen hoe u HTTP-aanvragen in uw toepassing verzendt om Dev Proxy te gebruiken.
Hier volgt een voorbeeld van hoe u kunt gebruiken global-agent
in een Node.js toepassing die gebruikmaakt node-fetch
van:
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));
})();
U kunt als volgt gebruiken global-agent
met Node.js en de standaardmodule https
:
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);
});
});
Wanneer u uw toepassing start, geeft u de proxy op met behulp van de GLOBAL_AGENT_HTTP_PROXY
omgevingsvariabele en negeert u certificaatfouten.
NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node global-node-fetch.mjs
node-fetch
node-fetch is een populaire bibliotheek die een fetch
implementatie biedt voor Node.js. node-fetch
biedt geen ondersteuning voor het opgeven van de proxy met behulp van omgevingsvariabelen. In plaats daarvan moet u een aangepaste agent maken en deze doorgeven aan de fetch
methode.
Hier volgt een voorbeeld van hoe u met Dev Proxy kunt gebruiken node-fetch
door een agent te definiƫren met behulp van het https-proxy-agent
pakket.
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));
})();
Axios
Axios is een andere populaire bibliotheek voor het maken van HTTP-aanvragen in Node.js. Met Axios kunt u de proxy opgeven met behulp van omgevingsvariabelen of de agent rechtstreeks in de aanvraagconfiguratie opgeven.
Axios en Dev Proxy gebruiken met omgevingsvariabelen
Wanneer u Dev Proxy met Axios gebruikt en de proxy opgeeft met behulp van omgevingsvariabelen, hoeft u uw code niet te wijzigen. U hoeft alleen maar de https_proxy
omgevingsvariabele in te stellen en Axios gebruikt deze om aanvragen te doen.
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));
})();
Geef de https_proxy
omgevingsvariabele globaal op of bij het starten van uw app.
https_proxy=http://127.0.0.1:8000 node axios.mjs
Kreeg
Vergelijkbaar met node-fetch
, Got biedt geen ondersteuning voor het opgeven van de proxy met behulp van omgevingsvariabelen. In plaats daarvan moet u een aangepaste agent maken en deze doorgeven aan de aanvraag.
Hier volgt een voorbeeld van hoe u Got kunt gebruiken met 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 fetch method
agent: {
https: agent
},
// Disable certificate validation
https: {
rejectUnauthorized: false
}
}).json();
console.log(JSON.stringify(result, null, 2));
})();
SuperAgent
SuperAgent
biedt geen ondersteuning voor het opgeven van de proxy met behulp van omgevingsvariabelen. Als u Dev Proxy wilt gebruiken met SuperAgent, moet u de superagent-proxy
invoegtoepassing installeren en de proxy configureren met behulp van de proxy
methode.
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')
// Disable certificate validation
.disableTLSCerts();
console.log(JSON.stringify(result.body, null, 2));
})();
Bekende problemen
Wanneer u Dev Proxy gebruikt met Node.js, kunnen de volgende problemen optreden.
Fout UNABLE_TO_VERIFY_LEAF_SIGNATURE
Wanneer u Dev Proxy gebruikt met Node.js, krijgt u een foutmelding die vergelijkbaar is met:
/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'
}
U kunt dit probleem oplossen door de NODE_TLS_REJECT_UNAUTHORIZED
omgevingsvariabele in te stellen op 0
. U kunt deze globaal of inline definiƫren bij het starten van uw app.
NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js