node.js http 'get' request with query string parameters

前端 未结 5 1571
悲&欢浪女
悲&欢浪女 2020-12-04 15:29

I have a Node.js application that is an http client (at the moment). So I\'m doing:

var query = require(\'querystring\').stringify(propertiesObject);
http.g         


        
相关标签:
5条回答
  • 2020-12-04 15:29

    Check out the request module.

    It's more full featured than node's built-in http client.

    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);
    });
    
    0 讨论(0)
  • 2020-12-04 15:31

    If you don't want use external package , Just add the following function in your utilities :

    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;
    }
    

    Then , in createServer call back , add attribute params to request object :

     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"
    
    })
    
    0 讨论(0)
  • 2020-12-04 15:31

    If you ever need to send GET request to an IP as well as a Domain (Other answers did not mention you can specify a port variable), you can make use of this function:

    function getCode(host, port, path, queryString) {
        console.log("(" + host + ":" + port + path + ")" + "Running httpHelper.getCode()")
    
        // Construct url and query string
        const requestUrl = url.parse(url.format({
            protocol: 'http',
            hostname: host,
            pathname: path,
            port: port,
            query: queryString
        }));
    
        console.log("(" + host + path + ")" + "Sending GET request")
        // Send request
        console.log(url.format(requestUrl))
        http.get(url.format(requestUrl), (resp) => {
            let data = '';
    
            // A chunk of data has been received.
            resp.on('data', (chunk) => {
                console.log("GET chunk: " + chunk);
                data += chunk;
            });
    
            // The whole response has been received. Print out the result.
            resp.on('end', () => {
                console.log("GET end of response: " + data);
            });
    
        }).on("error", (err) => {
            console.log("GET Error: " + err);
        });
    }
    

    Don't miss requiring modules at the top of your file:

    http = require("http");
    url = require('url')
    

    Also bare in mind that you may use https module for communicating over secured network.

    0 讨论(0)
  • 2020-12-04 15:40

    No need for a 3rd party library. Use the nodejs url module to build a URL with query parameters:

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

    Then make the request with the formatted url. requestUrl.path will include the query parameters.

    const req = https.get({
        hostname: requestUrl.hostname,
        path: requestUrl.path,
    }, (res) => {
       // ...
    })
    
    0 讨论(0)
  • 2020-12-04 15:43

    I have been struggling with how to add query string parameters to my URL. I couldn't make it work until I realized that I needed to add ? at the end of my URL, otherwise it won't work. This is very important as it will save you hours of debugging, believe me: been there...done that.

    Below, is a simple API Endpoint that calls the Open Weather API and passes APPID, lat and lon as query parameters and return weather data as a JSON object. Hope this helps.

    //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.
            }
        })
    })  
    

    Or if you want to use the querystring module, make the following changes

    var queryObject = querystring.stringify({
        APPID: OpenWeatherAppId.appId,
        lat: req.body.lat,
        lon: req.body.lon
    });
    
    request({
       url:urlOpenWeatherCurrent + queryObject
    }, function (error, response, body) {...})
    
    0 讨论(0)
提交回复
热议问题