为什么console.log输出所有记录而不是response.end - Node.js

时间:2016-01-27 07:43:12

标签: node.js

我是node.js的新手,我试图将一些数据输出到html。 我的代码在我使用console.log时有效,但在使用response.end时则无效。 当我使用response.end时,我只看到记录,而当我使用console.log时,我会看到所有记录

请参阅下面的完整代码:

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 个答案:

答案 0 :(得分:1)

使用Express,响应。结束()在一次调用后关闭通信通道,因此只有一个元素将发送给用户。在您构建数据阵列后,请不要使用 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()。 <{1}}和response.json()已在需要时关闭了频道。