2017-02-23 88 views
0

在Nodejs(v7.4)中,我从JSON对象创建查询字符串,以便可以更改通过请求发送的名称。当我使用request_options var时,查询就超时了。当我直接传递request_options var代码时,它可以工作。JSON对象查询API请求字符串

这段代码有错吗?

var request = require('request'); 
var FirstName = "John"; 
var LastName = "Wick"; 
var request_options = {"url":"https://api.example.com", 
      "method":"POST", 
      "headers":"{Content-Type:application/json}", 
      "body":{"firstname":FirstName, "lastname": LastName} 
      }; 

var request_OptStr = objectToQueryString(request_options) 
console.log(request_OptStr); 
request(request_OptStr, function(err, response, body){ 
    if(!err && response.statusCode < 400){ 
    //do something...... 
    } else { 
    if(response){ 
     console.log('ERROR'); 
     console.log(response.statusCode); 
    } 
    } 
}); 

objectToQueryString函数可以找到here。 request_OptStr的输出为url=https%3A%2F%2Fapi.example.com&method=POST&headers=%7BContent-Type%3Aapplication%2Fjson%7D&body%5Bfirstname%5D=John&body%5Blastname%5D=Wick

+0

我不清楚为什么你认为你需要在查询字符串,而不是在一个POST请求的主体的选项。你可以扩展吗? (无论哪种方式,您都可以使用变量来设置请求中的值,所以...) – nnnnnn

+0

只需遵循模板即可访问特定的数据库。如果我将选项作为字符串插入,代码将起作用。我无法在请求中设置变量的原因是它期望一个字符串。 – JnL

回答

0

objectToQueryString功能从对象编码查询字符串,并创建网址的,所以当你在request_OptStr使用request你所有的只是queries和HTTP请求失败,因为它无效URI。你想要什么可能是这样的:

var request = require('request'); 
var FirstName = "John"; 
var LastName = "Wick"; 

var request_options = { 
    "method": "POST", 
    "headers": "{Content-Type:application/json}", 
    "body": { 
    "firstname": FirstName, 
    "lastname": LastName 
    } 
}; 

var request_OptStr = objectToQueryString(request_options) 

request("http://api.example.com/" + request_OptStr, function(err, response, body) { 
    if (!err && response.statusCode == 200) { 
    console.log(body); 
    } else { 
    console.log(err); 
    } 
});