提问者:小点点

js超文本传输协议'get'请求与查询字符串参数


我有一个 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 查询步骤。这应该由一个公共库封装,但我还没有看到它在节点的 http 库中存在,我不确定什么标准的 npm 包可以完成它。有没有一种合理广泛使用的方法更好?

url.format 方法节省了构建自己的 URL 的工作。但理想情况下,请求也会比这更高。


共3个答案

匿名用户

查看请求模块。

它比node的内置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);
});

匿名用户

不需要第三方库。使用nodejs url模块构建带有查询参数的url:

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

然后用格式化的url发出请求。< code>requestUrl.path将包含查询参数。

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

匿名用户

如果不想使用外部包,只需在工具中添加以下功能:

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

然后,在< code>createServer回调中,将属性< code>params添加到< code>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"

})