2016-01-27 73 views
1

我是一个新手与node.js,我想输出一些数据到HTML。 当我使用console.log时,我的代码有效,但当我使用response.end时没有。 当我使用我到Response.End只记录看,而当我使用的console.log我能看到的所有记录为什么console.log输出所有记录,而不是response.end - Node.js

见我下面全码:

var http = require('http'); 
var formOutput; 
var WooCommerceAPI = require('woocommerce-api'); 

// Initialize the WooCommerceAPI class 
var WooCommerce = new WooCommerceAPI({ 
    //url: 'http://example.com', // Your store url (required) 
}); 

function handleRequest(response) { 
    // GET example 
    WooCommerce.get('products', function (err, data, res) { 
     //console.log(res); 

     //var fs = require('fs'); 
     //var jsonContent = JSON.parse(JSON.stringify(res, null, 4)) 
     var jsonContent = JSON.parse(res) 

     for (var i = 0; i < jsonContent["products"].length; i++) { 
      var name = jsonContent["products"][i]; 
      // this works well and I can output all records 
      //console.log(name['title']); 
      //console.log(name['id']); 
      //console.log(name['sku']); 
      //console.log(name['regular_price']); 
      //response.writeHead(200, { 'Content-Type': 'text/html' }); 
      //res.end(name['id']); 
      formOutput = name['regular_price']; 
      //formOutput = '<h1>XYZ Repository Commit Monitor</h1>'; 
      //response.write(); 
      //Only get one record 
      response.end(formOutput); 
      //response.write('<html><head></head><body>'); 
      //response.end("test"); 
      //response.end('</body></html>'); 
     } 
    }); 
     //response.end(formOutput); 
    } 


http.createServer(function (req, response) { 
    if (response.url === '/favicon.ico') { 
     response.writeHead(404); 
     response.end(); 
    } else { 
     response.writeHead(200, { 'Content-Type': 'text/html' }); 
    } 

    //code here... 
    handleRequest(response); 
    // response.end(formOutput); 

}).listen(1337, "localhost"); 
console.log("Server running at http://localhost:1337/"); 

回答

1

随着快递,响应。 结束()在一次呼叫后关闭通信信道,因此只有一个元素将被发送给用户。不要使用end()发送数据,在你的情况下,使用response.json()(或send())ONCE建立数据数组后。

var dataToSend = []; 
for (var i = 0; i < jsonContent["products"].length; i++) { 
    // build an array of data to send here 

} 

response.json(dataToSend); 

在一个侧面说明,除非你想明确地结束通信不使用response.end()。当需要时,response.json()response.send()已经关闭该通道。

+0

感谢杉杉当我使用response.json和response.send我得到错误“response.json是不是一个函数” 这是用来磨片使用这我不使用 – naijacoder

+0

我假设你使用快递express.js 。对于'http'模块,你可以使用'response.write',你必须调用'end()'(一次)来关闭连接。 – Shanoor

+0

感谢解决它 – naijacoder

相关问题