Ik ben op zoek om informatie van een HTTP-aanvraag te gebruiken met behulp van Node.js (d.w.z. bel een externe webservice en echo de reactie op de client).
In PHP zou ik curl hebben gebruikt om dit te doen. Wat is de beste praktijk in het knooppunt?
Antwoord 1, Autoriteit 100%
Zie de documentatie voor de HTTP-module voor een volledig voorbeeld:
https://nodejs.org/api/http.html#http_http_request_options_callback
Antwoord 2, Autoriteit 72%
De http
module die u gebruikt om servers uit te voeren, wordt ook gebruikt om externe verzoeken te maken .
Hier is het voorbeeld in hun documenten:
var http = require("http");
var options = {
host: 'www.google.com',
port: 80,
path: '/upload',
method: 'POST'
};
var req = http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('data\n');
req.write('data\n');
req.end();
Antwoord 3, Autoriteit 34%
U kunt eenvoudig de aanvraagmodule gebruiken:
https://www.npmjs.com/package/request
Voorbeeldcode:
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
else {
console.log("Error "+response.statusCode)
}
})
Antwoord 4, Autoriteit 26%
Aangezien er uitziet als node-curl
is dood, ik ‘ ve gevorkt, hernoemd en gewijzigd om meer krullen te zijn en om onder Windows te compileren.
Gebruiksvoorbeeld:
var Curl = require( 'node-libcurl' ).Curl;
var curl = new Curl();
curl.setOpt( Curl.option.URL, 'www.google.com' );
curl.setOpt( 'FOLLOWLOCATION', true );
curl.on( 'end', function( statusCode, body, headers ) {
console.info( statusCode );
console.info( '---' );
console.info( body.length );
console.info( '---' );
console.info( headers );
console.info( '---' );
console.info( this.getInfo( Curl.info.TOTAL_TIME ) );
this.close();
});
curl.on( 'error', function( err, curlErrorCode ) {
console.error( err.message );
console.error( '---' );
console.error( curlErrorCode );
this.close();
});
curl.perform();
presteren is async,
Het is nog steeds in alpha, maar dit gaat snel veranderen en helpt de hulp. strike>
Nu is het mogelijk om Easy
hendel te gebruiken voor synchronisatieaanvragen, bijvoorbeeld:
var Easy = require( 'node-libcurl' ).Easy,
Curl = require( 'node-libcurl' ).Curl,
url = process.argv[2] || 'http://www.google.com',
ret, ch;
ch = new Easy();
ch.setOpt( Curl.option.URL, url );
ch.setOpt( Curl.option.HEADERFUNCTION, function( buf, size, nmemb ) {
console.log( buf );
return size * nmemb;
});
ch.setOpt( Curl.option.WRITEFUNCTION, function( buf, size, nmemb ) {
console.log( arguments );
return size * nmemb;
});
// this call is sync!
ret = ch.perform();
ch.close();
console.log( ret, ret == Curl.code.CURLE_OK, Easy.strError( ret ) );
Het project is nu ook stabiel!
Antwoord 5, autoriteit 24%
BEWERKEN:
Voor nieuwe projecten gelieve geen verzoek te gebruiken, aangezien het project zich nu in de onderhoudsmodus bevindt en uiteindelijk zal worden beëindigd
https://github.com/request/request/issues/3142
In plaats daarvan zou ik Axiosaanbevelen, de bibliotheek is in overeenstemming met de nieuwste normen van Node en er zijn enkele beschikbare plug-ins om deze te verbeteren, waardoor nepserverreacties, automatische nieuwe pogingen en andere functies mogelijk zijn.
https://github.com/axios/axios
const axios = require('axios');
// Make a request for a user with a given ID
axios.get('/user?ID=12345')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
Of gebruik async / wait:
try{
const response = await axios.get('/user?ID=12345');
console.log(response)
} catch(axiosErr){
console.log(axiosErr)
}
Ik gebruik meestal REQUEST, het is een vereenvoudigde maar krachtige HTTP-client voor Node.js
https://github.com/request/request
het is op NPM
npm install request
Hier is een gebruiksvoorbeeld:
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
})
Antwoord 6, Autoriteit 8%
Nou, als je echt een krul-equivalent nodig hebt, kun je node-curl
npm install node-curl
U moet waarschijnlijk libcurl4-gnutls-dev
toevoegen.
Antwoord 7, Autoriteit 7%
De bovenstaande voorbeelden werken, maar ga niet zo ver om echt te behandelen met een real-wereldvoorbeeld (dat wil zeggen wanneer u gegevens verwerkt die in meerdere brokken komen. Een ding dat u nodig hebt om zeker te zijn van een ‘op brok ‘Handler die de gegevens in een array (snelste manier om dit in JS te doen) en een’ on-end’-handler die ze allemaal bij elkaar verbindt, zodat je het kunt retourneren.
Dit is vooral nodig wanneer u werkt met grote verzoeken (5000 lijnen) en de server stuurt een hoop gegevens op u.
Hier is een voorbeeld in een van mijn programma’s (Coffeescript):
https://gist.github.com/1105888
Antwoord 8, Autoriteit 6%
Hoe zit het met bijvoorbeeld https://github.com/joyent/node/ WIKI / MODULES # WIKI-TCP . Een zeer snel samenvatting = & gt;
Antwoord 9, autoriteit 4%
Er is een npm-module om een curl-achtig verzoek te doen, npm curlrequest
.
Stap 1: $npm i -S curlrequest
Stap 2: In uw knooppuntbestand
let curl = require('curlrequest')
let options = {} // url, method, data, timeout,data, etc can be passed as options
curl.request(options,(err,response)=>{
// err is the error returned from the api
// response contains the data returned from the api
})
Voor meer informatie en begrip, npm curlrequest
Antwoord 10, autoriteit 3%
Gebruik aanvraag npm module en na oproep
var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
});
Gebruik voor de beste werkwijze ook een winstonlogger-module of anders eenvoudige console.log en voer vervolgens uw toepassing uit zoals
npm start output.txt
Resultaat van bovenstaande opdracht genereert één txt-bestand op root met alle gegevens die u hebt afgedrukt in console.log
Antwoord 11, autoriteit 2%
Gebruikt reqclient, het is een kleine clientmodule bovenop request
waarmee u alle activiteiten kunt loggen in cURL-stijl(optioneel, voor ontwikkelomgevingen). Heeft ook leuke functies zoals het parseren van URL’s en parameters, authenticatie-integraties, cache-ondersteuning, enz.
Als u bijvoorbeeld een clientobject maakt en een verzoek doet:
var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
baseUrl:"http://baseurl.com/api/v1.1",
debugRequest:true, debugResponse:true
});
var resp = client.post("client/orders", {"client":1234,"ref_id":"A987"}, {headers: {"x-token":"AFF01XX"}})
Het logt ongeveer als volgt in de console:
[Requesting client/orders]-> -X POST http://baseurl.com/api/v1.1/client/orders -d '{"client": 1234, "ref_id": "A987"}' -H '{"x-token": "AFF01XX"}' -H Content-Type:application/json
[Response client/orders]<- Status 200 - {"orderId": 1320934}
Het verzoek retourneert een Belofteobject, dus je moet met then
en catch
afhandelen wat je met het resultaat moet doen.
reqclient
is beschikbaar met npm, u kunt de module installeren met: npm install reqclient
.
Antwoord 12, autoriteit 2%
Hier is een standaard lib (http
) async / wait-oplossing.
const http = require("http");
const fetch = async (url) => {
return new Promise((resolve, reject) => {
http
.get(url, (resp) => {
let data = "";
resp.on("data", (chunk) => {
data += chunk;
});
resp.on("end", () => {
resolve(data);
});
})
.on("error", (err) => {
reject(err);
});
});
};
Gebruik:
await fetch("http://example.com");
Antwoord 13
Uiteindelijk heb ik met behulp van de grunt-shell bibliotheek.
Hier is mijn bron kern voor mijn volledig geïmplementeerd Grunt taak voor iemand anders denken over het werken met de EdgeCast API. Je zult in mijn voorbeeld vinden dat ik een grunt-shell om de krul commando dat het CDN zuiveringen uit te voeren.
Dit was dat ik kreeg uiteindelijk na urenlang proberen om een HTTP-verzoek aan het werk binnen Node krijgen. Ik was in staat om een werkend te krijgen in Ruby en Python, maar voldeed niet aan de eisen van dit project.
Antwoord 14
U kunt proberen met behulp van POSTMAN Chrome-app voor uw aanvraag en u kunt knooppunt js code te genereren vanaf daar
Antwoord 15
Ik had een probleem verzenden POST gegevens naar cloud DB uit IOT Raspberry Pi, maar na uren ik erin geslaagd om het recht te krijgen.
Ik gebruikte command prompt om dit te doen.
sudo curl --URL http://<username>.cloudant.com/<database_name> --user <api_key>:<pass_key> -X POST -H "Content-Type:application/json" --data '{"id":"123","type":"987"}'
Opdrachtprompt toont de problemen – verkeerde gebruikersnaam/pas; slecht verzoek enz.
–URL-database/serverlocatie (ik gebruikte eenvoudige gratis Cloudant DB)
–gebruiker is de gebruikersnaam van het authenticatiegedeelte: pass die ik heb ingevoerd via API-pass
-X definieert welk commando moet worden aangeroepen (PUT,GET,POST,DELETE)
-H inhoudstype – Cloudant gaat over documentdatabase, waar JSON wordt gebruikt
–data-inhoud zelf gesorteerd als JSON
Antwoord 16
Request npm module Request node mouldeis goed te gebruiken, het heeft optie-instellingen voor get /post request plus het wordt ook veel gebruikt in de productieomgeving.
Antwoord 17
U kunt de aanvraag npm-module gebruiken.
Supereenvoudig in gebruik.
Request is ontworpen om de eenvoudigste manier te zijn om http-aanroepen te doen. Het ondersteunt HTTPS en volgt standaard omleidingen.
var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
});
Antwoord 18
Misschien wil je iets als dit proberen
curl = require('node-curl');
curl('www.google.com', function(err) {
console.info(this.status);
console.info('-----');
console.info(this.body);
console.info('-----');
console.info(this.info('SIZE_DOWNLOAD'));
});