2017-09-22 74 views
1

我在遵循關於HTTP請求主題的教程時遇到問題。我無法讓代碼自動解析我對JSON的回覆。這仍然是文字。雖然說明指定'json:true'時,會將類型設置爲json並解析。JavaScript請求響應類型

教程:https://www.terlici.com/2015/04/28/couchdb-node-express.html

var request = require('request'); 

var url = 'http://127.0.0.1:5984/'; 
var db = 'js-express-librarytutorial/'; 
var id = 'document_id'; 

request.put(url + db); 

request.put({ 
    url: url + db + id, 
    body: { 
     user: "Tom", 
     message: "Document 2" 
    }, 
    json: true 
}, function(){request(url + db + id, function(err, res, body) { 
     console.log(typeof (body)); 
     console.log(body); 
     console.log(body.user + ' : ' + body.message); 
    }) 
}); 

有誰知道如何觸發http-calls自動解析。

+0

什麼是執行console.log(體)顯示? –

+0

Typeof(body)返回類型:字符串。 body本身是json發送給db的一串字符串。這個想法是我從json中獲取json的返回信息,因爲json正在發佈,並將其作爲json保存在沙發中。它沒有任何邏輯來作爲返回的字符串。 – TomBr

+0

是的,它有點奇怪!如果你做console.log(JSON.parse(body))它顯示一個JSON呢? –

回答

0

所以研究指出,我的問題是由於我原來的調用範圍和嵌套的回調函數。

請求調用的參數json: true將content-type設置爲application/json。這自動利用任何返回數據的解析:

request({url: url+db+"1", method: 'get', json: true}, function(err, res, body) { 
    if (err) { 
     throw err; 
    } 
    console.log(typeof (body)); 
    console.log(body); 
}); 

在此示例中不需要解析並返回一個對象。

然而,當我窩在與一個單獨的請求呼叫的內容類型的匿名函數回調返回到文本/ *

隨着匿名回叫:

request.put(url + db, function(err, res, body){ 
    request.put({ 
     url: url + db + id, 
     body: { user : "Tom", message: "Document"}, 
     json: true 
    },function(){ 
     request(url+db+id,, function(err, res, body){ 
      console.log(typeof (body)); 
      console.log(body); 
     }); 
    }); 
}); 

這可以通過能夠防止:

  • 指定在單獨的請求呼叫的內容類型

例子:

request.get({...}, function(){request({url: url+db+id, method: "GET", json: true}, function(err, res, body){})} 
  • 取出單獨請求和呼叫處理直接在回調返回的數據:

例子:

request({url: url+db+"1", method: 'get', json: true}, function(err, res, body) {...}); 
1

嘗試發送中的RequestData JSON這樣的:

request.put({ 
    url: url + db + id, 
    json: ' { "user": "Tom", "message": "Document 2" }' 
}, function(){request(url + db + id, function(err, res, body) { 
     console.log(typeof (body)); 
     console.log(body); 
     console.log(body.user + ' : ' + body.message); 
    }) 
}); 

這可能只是工作。 我沒有權利評論問題。否則,我應該在評論中提出建議。因此,張貼爲答案。 請讓我知道它是否適合你。