为什么response.write()只打印node.js中的第一行?

时间:2014-08-05 10:07:16

标签: mysql node.js

我是node.js的新手。我遇到了GET请求的问题。我正在使用2个mysql查询。第一个是返回一些id,我在第二个查询中使用了那些ID。 在控制台中,所有行都已成功打印,但在浏览器中只有第一行。

我的代码结构如下:

function userProjects(request, response) {

    connection.query("1st query", function(err, first_output, fields) {
        response.writeHead(200, {
            "Content-Type": "application/json"
        });

        for (var i in first_output) {
            var obj = first_output[i];
            connection.query("select * from table where parent_id=" + obj.id, function(err, apartmentRows, fields) {
                console.log(apartmentRows);
                response.write("apartments are : " + JSON.stringify(apartmentRows));
                response.end();
            });
        }
    });
}

到目前为止,我已经通过浏览各种内容来理解,由于response.end(),它停止在这里获取剩余的行。这就是为什么所有人都不打印。但我没有找到解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:0)

在调用response.end()之前,您需要确保执行所有查询。我天真的方法是设置一个计数器标志来检查执行的查询数量。完成所有查询后,只需结束响应。

function userProjects(request, response) {

    connection.query("1st query", function(err, first_output, fields) {
        response.writeHead(200, {
            "Content-Type": "application/json"
        });
        var totalQueries = 0;
        for (var i in first_output) {
            var obj = first_output[i];
            totalQueries++; //increases the number of query performed
            connection.query("select * from table where parent_id=" + obj.id, function(err, apartmentRows, fields) {
                console.log(apartmentRows);
                response.write("apartments are : " + JSON.stringify(apartmentRows));

                totalQueries--; //decreases the query count 
                if (totalQueries == 0) //when all queries are performed end the response
                    response.end();
            });
        }
    });
}