2016-10-08 100 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。