it-swarm.com.de

node.js http "get" -Anforderung mit Abfragezeichenfolgenparametern

Ich habe eine Node.js-Anwendung, bei der es sich (derzeit) um einen http-Client handelt. Also mache ich:

var query = require('querystring').stringify(propertiesObject);
http.get(url + query, function(res) {
   console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
    console.log("Got error: " + e.message);
});

Dies scheint ein guter Weg zu sein, um dies zu erreichen. Allerdings bin ich etwas verärgert, dass ich den url + query - Schritt machen musste. Dies sollte durch eine gemeinsame Bibliothek gekapselt werden, aber ich sehe dies noch nicht in der http -Bibliothek des Knotens und bin mir nicht sicher, welches Standard-npm-Paket dies erreichen könnte. Gibt es einen einigermaßen verbreiteten Weg, der besser ist?

rl.format Methode erspart das Erstellen einer eigenen URL. Aber im Idealfall wird die Anfrage auch höher sein.

60
djechlin

Schauen Sie sich das Anfrage Modul an.

Es bietet mehr Funktionen als der integrierte http-Client des Knotens.

var request = require('request');

var propertiesObject = { field1:'test1', field2:'test2' };

request({url:url, qs:propertiesObject}, function(err, response, body) {
  if(err) { console.log(err); return; }
  console.log("Get response: " + response.statusCode);
});
132
Daniel

Wenn Sie kein externes Paket verwenden möchten, fügen Sie einfach die folgende Funktion in Ihre Dienstprogramme ein:

var params=function(req){
  let q=req.url.split('?'),result={};
  if(q.length>=2){
      q[1].split('&').forEach((item)=>{
           try {
             result[item.split('=')[0]]=item.split('=')[1];
           } catch (e) {
             result[item.split('=')[0]]='';
           }
      })
  }
  return result;
}

Fügen Sie dann im createServer Rückruf das Attribut params zum request Objekt hinzu:

 http.createServer(function(req,res){
     req.params=params(req); // call the function above ;
      /**
       * http://mysite/add?name=Ahmed
       */
     console.log(req.params.name) ; // display : "Ahmed"

})
6
Abdennour TOUMI

Ich habe Probleme damit, meiner URL Parameter für Abfragezeichenfolgen hinzuzufügen. Ich konnte es nicht zum Laufen bringen, bis mir klar wurde, dass ich am Ende meiner URL ? Hinzufügen musste, sonst funktioniert es nicht. Das ist sehr wichtig, da es Ihnen Stunden beim Debuggen erspart, glauben Sie mir: war dort ... habe das getan .

Unten finden Sie einen einfachen API-Endpunkt, der die Open Weather API aufruft und APPID, lat und lon als Abfrageparameter und Rückgabe von Wetterdaten als JSON Objekt. Hoffe das hilft.

//Load the request module
var request = require('request');

//Load the query String module
var querystring = require('querystring');

// Load OpenWeather Credentials
var OpenWeatherAppId = require('../config/third-party').openWeather;

router.post('/getCurrentWeather', function (req, res) {
    var urlOpenWeatherCurrent = 'http://api.openweathermap.org/data/2.5/weather?'
    var queryObject = {
        APPID: OpenWeatherAppId.appId,
        lat: req.body.lat,
        lon: req.body.lon
    }
    console.log(queryObject)
    request({
        url:urlOpenWeatherCurrent,
        qs: queryObject
    }, function (error, response, body) {
        if (error) {
            console.log('error:', error); // Print the error if one occurred

        } else if(response && body) {
            console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
            res.json({'body': body}); // Print JSON response.
        }
    })
})  

Wenn Sie das Modul querystring verwenden möchten, nehmen Sie die folgenden Änderungen vor

var queryObject = querystring.stringify({
    APPID: OpenWeatherAppId.appId,
    lat: req.body.lat,
    lon: req.body.lon
});

request({
   url:urlOpenWeatherCurrent + queryObject
}, function (error, response, body) {...})
5
AllJs

Keine Notwendigkeit für eine Drittanbieter-Bibliothek. Verwenden Sie nodejs RL-Modul , um eine URL mit Abfrageparametern zu erstellen:

const requestUrl = url.parse(url.format({
    protocol: 'https',
    hostname: 'yoursite.com',
    pathname: '/the/path',
    query: {
        key: value
    }
}));

Dann stellen Sie die Anfrage mit der formatierten URL. requestUrl.path enthält die Abfrageparameter.

const req = https.get({
    hostname: requestUrl.hostname,
    path: requestUrl.path,
}, (res) => {
   // ...
})
4
Justin Meiners