使用回调函数时节点js中响应对象的范围

时间:2014-09-08 06:53:55

标签: javascript node.js web

我有一个函数onRequest(request,response),它包含一个回调函数。当我尝试在回调函数中使用响应对象(即response.write())打印数据时,它不打印。但是使用console.log()在控制台上打印相同的数据请帮助解决为什么response.write()不起作用。

var http = require("http");
var _mysql = require("mysql");

function onRequest(request, response) {

    console.log("Request received.");
    response.writeHead(200, {
        "Content-Type": "text/plain"
    });
    response.write("Hello World");
    var _mysql = require('mysql');

    var HOST = 'localhost';
    var PORT = 3306;
    var MYSQL_USER = 'root';
    var MYSQL_PASS = 'root';
    var DATABASE = 'library_management';
    var TABLE = 'book_details';

    var mysql = _mysql.createConnection({
        host: HOST,
        port: PORT,
        user: MYSQL_USER,
        password: MYSQL_PASS,
    });

    mysql.query('use ' + DATABASE);

    mysql.query('select * from ' + TABLE + ' where price < 1212',
        function(err, result, fields) {
            if (err) throw err;
            else {
                console.log('Books less than 1212');

                for (var i in result) {
                    var book = result[i];
                    response.write("Hello");
                    console.log(book.title + ':' + book.price);
                    //above is working
                    response.write(book.title + ':' + book.price);
                    //above is not working...why?
                }
            }

        });


    response.end();
}

http.createServer(onRequest).listen(8888);

console.log("Server has started.");

1 个答案:

答案 0 :(得分:2)

您的回复很可能已经end编辑。

尝试

mysql.query('select * from ' + TABLE + ' where price < 1212',
    function(err, result, fields) {
        if (err) throw err;
        else {
            console.log('Books less than 1212');

            for (var i in result) {
                var book = result[i];
                response.write("Hello");
                console.log(book.title + ':' + book.price);
                //above is working
                response.write(book.title + ':' + book.price);
                //above is not working...why?
            }
            response.end();//don't end response until data is written
        }

    });