2013-06-03 5 views
44

현재 http 클라이언트 인 Node.js 애플리케이션이 있습니다. 그래서 내가하고있어 :node.js 쿼리 문자열 매개 변수로 'get'요청을 받았습니다.

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의 작업을 저장합니다. 그러나 이상적으로 요청은 이것보다 더 높은 레벨 일 것입니다.

+0

http://nodejs.org/api/url.html#url_url_format_urlobj – SLaks

+0

https://nodejs.org /api/querystring.html – velop

답변

103

request 모듈을 확인하십시오.

노드의 기본 제공 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); 
}); 
+0

일반적인 propertiesObject는 어떻게 보이나요? 나는 이것을 작동시키지 않는다. – user264230

+2

qs는 질의 문자열 키이다. 따라서 쿼리 문자열에서 원하는 필드는 무엇입니까? {field1 : 'test1', field2 : 'test2'} – Daniel

3

, 그냥 유틸리티에서 다음 함수를 추가 : 다음

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 호출에 다시 request 객체에 속성 params을 추가

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" 

}) 
+1

OP 질문은 http 서버가 아니라 http 클라이언트에 관한 것입니다. 이 응답은 HTTP 요청에 대한 쿼리 문자열을 인코딩하지 않고 http 서버에서 쿼리 문자열을 구문 분석하는 데 적합합니다. –

0

URL에 쿼리 문자열 매개 변수를 추가하는 방법에 어려움을 겪고 있습니다. 내 URL 끝에 ?을 추가해야한다는 것을 알기 전까지는 작동하지 못했습니다. 그렇지 않으면 작동하지 않습니다. 이것은 디버깅에 몇 시간을 절약 할 수 있기 때문에 매우 중요합니다. 나를 믿으십시오. ... been done .... 다음은

Open Weather API를 호출하고 쿼리 매개 변수로 APPID, latlon를 전달하고 JSON 대상으로 기상 데이터를 반환하는 간단한 API 엔드 포인트입니다. 희망이 도움이됩니다.

//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) {...}) 
관련 문제