2016-10-08 145 views
0

我正在從我的node.js服務器發送一個請求,並在控制檯中嘗試打印響應數據。當我嘗試打印Json數組時。正常。像這樣 -不能從Json數組獲得鍵值:

{"id":1,"name":"Asm Arman","confirmed":0,"confirmation_code":null,"created_at":"2016-09-29 16:34:39","updated_at":"2016-10-04 06:55:30"} 

使用這個 -

var request = require('request'); 
var app = require("express")(); 

app.get('/', function(req, res){ 
request.get('http://localhost:8000/api', function(err, response, body){ 

***res.send(body); 
console.log(body);*** 

}); 
}); 

app.listen(8081); 

但我不能打印鍵:值 pair.I我得到不確定。這裏是我的JS文件

var request = require('request'); 
var app = require("express")(); 

app.get('/', function(req, res){ 
request.get('http://localhost:8000/api', function(err, response, body){ 
var string=JSON.parse(body); 
res.send(string.name); 
console.log(string.name); 

}); 
}); 

app.listen(8081); 

不僅JSON.parse()來我還用Json.stringify(),但沒有運氣。

+1

你的請求標題是什麼樣的?如果您的內容類型未設置爲application/json,那麼請求模塊可能無法正確拾取主體 –

回答

1

爲了解析請求的正文,您需要使用body-parser,默認情況下,它不隨Express一起安裝。它可讓您處理使用JSON,URL編碼的表單值或文本格式化的主體。

npm install body-parser --save 

然後將下列內容添加到您的代碼中。

var bodyParser = require('body-parser'); 

// place this before your routes 
app.use(bodyParser.json()) 
+0

先生,我已經使用它了。現在,我怎樣才能獲得key:value對? –

+0

先生,你很棒,它的工作。 –

0

看一看here,這是一個基本的例子。我不得不看看這些文檔,看看get方法是如何工作的,因爲我認爲它與你的例子類似,它會自動分析響應主體。

簡而言之,節點中的請求和響應對象是流。隨着數據流的進入,它會觸發data事件,該事件將爲您提供可以捕獲並附加在一起的數據塊,以獲取請求或響應中的正文。

所以,你的代碼看起來是這樣的:

let body = ''; 
http.get('url', (res) => { 
    res.on('data', (chunk) => body += chunk); 
    res.on('end',() => { 
    // now the body variable is prepared and you can do something with it 
    } 
    res.on('error', err => { 
    // Handle errors 
    } 
}); 

的數據來自於塊作爲緩衝,所以需要將轉換爲字符串可能,然後分析它使用它。所以,這樣的事情:

JSON.parse(body.toString()); 
0

你是100%確定這不僅僅是console.log輸出你的對象的方式嗎?也許request爲你解析了JSON。