2013-01-16 171 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