2013-01-16 174 views
0

我试图开发一个基于node.js构建的Web应用程序,它与PHP api交互。以下我试图请求一个JSON对象,即我的PHP API创建的。我想要做的就是获取它然后用在我的一个.ejs模板中。http.get和node.js和JSON

这里是我的节点代码,

/* 
* GET home page. 
*/ 

//var request = require('reqeust'); 
var http = require('http'); 
var body = ""; 

exports.index = function(req, res){ 

    var options = { 
     host: 'api.dev.com', 
     port: 80, 
     path: '/api/v1/posts', 
     method: 'GET' 
    }; 

    http.get(options, function(res) { 
     console.log("Got response: " + res.statusCode); 
     console.log(res); 
     res.on("data", function(chunk) { 
     console.log("BODY: " + chunk); 
     }); 
    }).on('error', function(e) { 
     console.log("Got error: " + e.message); 
    }); 

    res.render('index', { data: body }); 
}; 

EJS

<%= data.title %> 

然而data.title正在恢复为未定义,我的JSON对象看起来像下面,并且是有效的。

[{"title":"This is the title of post 1","extract":"This is just a proof of concept more than anything at the moment","body":"<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. \n \t\t\t\tCras sed tellus massa, at commodo lectus. Ut metus nulla, sollicitudin id mollis ac, \n \t\t\t\tmalesuada eget libero. Duis sit amet auctor metus. Suspendisse et ornare dolor.\n \t\t\t\tMorbi non sodales sem. Nunc semper hendrerit dignissim. Proin id mollis purus.\n \t\t\t\tProin leo leo, feugiat ac sodales in, laoreet quis nisl. Etiam sed enim in libero\n \t\t\t\tpellentesque porttitor id eget diam.<\/p>","date_created":"01\/01\/2013 13:08:45","author":"Simon"}] 

回答

1

尝试使用request模块,让你不必应付块。

/* 
* GET home page. 
*/ 

var request = require('reqeust'); 
var http = require('http'); 
var body = ""; 

exports.index = function(req, res){ 

    var options = { 
     host: 'api.dev.com', 
     port: 80, 
     path: '/api/v1/posts', 
     method: 'GET' 
    }; 

    request(options, function(err, res, data) { //chunks are already aggregated 
     console.log("Got response: " + res.statusCode); 
     data = JSON.parse(data); // you need to parse the JSON-string into real object 
     console.log(data); // inspect what you got 
     res.render('index', { data: data }); 
    }) 
}; 

确定您需要npm install request,您已经安装了吗?

0

data是包含对象的数组,尝试

<%= data[0].title %> 
+0

我试过了,它仍然返回undefined,但是,当我通过JSBIN运行相同的JSON对象时,我可以访问就像您的示例。 – Udders

+0

@ sico87 from'var body =“”; ... res.render('index',{data:body});'数据看起来像一个空字符串。 – Musa