node.js http 'получают' запрос с параметрами строки запроса

У меня есть приложение Node.js, которое является http клиентом (в данный момент). Таким образом, я делаю:

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

Это походит на достаточно хороший способ выполнить это. Однако я несколько раздражаюсь, что я должен был сделать url + query шаг. Это должно инкапсулироваться общей библиотекой, но я не вижу это существующее в узле http библиотека все же и я не уверен, какой стандарт npm пакет мог бы выполнить ее. Существует ли обоснованно широко используемый способ, которым это лучше?

метод url.format сохраняет работу создания собственного URL. Но идеально запрос будет высокоуровневым, чем это также.

62
задан 3 June 2013 в 23:19

4 ответа

Проверьте запрос модуль.

Это более полнофункционально, чем встроенный http клиент узла.

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);
});
137
ответ дан 31 October 2019 в 13:30

Если Вы не хотите использование внешний пакет, Просто добавьте следующую функцию в своих утилитах:

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

Затем в createServer перезванивает, добавляет атрибут params к request объект:

 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
ответ дан 31 October 2019 в 13:30

Я боролся с тем, как добавить параметры строки запроса к моему URL. Я не мог заставить его работать, пока я не понял, что должен был добавить ? в конце моего URL, иначе это не будет работать. Это очень важно, поскольку это будет сохранять Вас часы отладки, верить мне: там... сделанный это .

Ниже, простая Конечная точка API, которая звонит , Открывают Weather API и передачи APPID, lat и lon как параметры запроса и данные о погоде возврата как JSON объект.Надеюсь, это поможет.

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

Или если Вы хотите использовать querystring модуль, внесите следующие изменения

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

request({
   url:urlOpenWeatherCurrent + queryObject
}, function (error, response, body) {...})
5
ответ дан 31 October 2019 в 13:30

Никакая потребность в сторонней библиотеке. Используйте модуль nodejs url для создания URL с параметрами запроса:

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

Затем выполняют запрос с отформатированным URL. requestUrl.path будет включать параметры запроса.

const req = https.get({
    hostname: requestUrl.hostname,
    path: requestUrl.path,
}, (res) => {
   // ...
})
4
ответ дан 31 October 2019 в 13:30

Другие вопросы по тегам:

Похожие вопросы: