2017-02-23 32 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); 
    } 
});