0

我在 node.js 中编写了这段代码:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write('start\n');
    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'hostname',
      user     : 'user',
      password : 'pass',
      database : 'dbname',
    });

    connection.connect();

    connection.query('SELECT code FROM user_type', function(err, rows, fields) {
      if (err) throw err;
            //This for is to run on all the results
            for(var i=0;i<2;i++){
            res.write('name:',rows[i].code);
        }
    });

    connection.end();

  res.end('End');
}).listen(8080);
console.log('Server running');

我的问题是: 1. 为什么 for 循环中的 res.write 在我的 html 页面中没有打印任何内容?2.在for中写什么而不是2?

4

1 回答 1

3
  1. 问题是执行的时间。

    由于connection.query()是异步的,它会将回调的执行延迟function到查询完成时,但同时允许周围的代码块继续执行。这导致在res.end('End')之前执行res.write('name:',rows[i].code)

    要延迟res.end(),请将其移动到回调中:

    connection.query(..., function(err, rows, fields) {
        if (err) throw err;
    
        for (...) {
            res.write('name:',rows[i].code);
        }
        res.end('End');
    });
    
  2. rowsArray当没有时应该是an err,所以你可以使用它的length属性

    for (var i = 0; i < rows.length; i++) {
    

    length将 的值存储在局部变量中也是一种常见的做法:

    for (var i = 0, len = rows.length; i < len; i++) {
    
于 2013-03-20T21:34:39.220 回答