当我连接到MySQL时,Nodejs无法加载页面?

时间:2014-01-19 08:54:28

标签: mysql node.js

我可以在node.js上运行其他程序没有问题。当我想通过NODE.js连接到MySQL时,当我在终端中输入nodejs mysqlConnection.js而在浏览器中输入http://localhost:8080/时,它会永远加载。

我的代码如下:

// Include http module,
var http = require('http'),
// And mysql module you've just installed.
   mysql = require("mysql");

// Create the connection.
// Data is default to new mysql installation and should be changed according to your configuration.
var connection = mysql.createConnection({
   user: "root",
   password: "",
   database: "framework"
});

// Create the http server.
http.createServer(function (request, response) {
   // Attach listener on end event.
   request.on('end', function () {
      // Query the database.
      connection.query('SELECT * FROM words;', function (error, rows, fields) {
         response.writeHead(200, {
            'Content-Type': 'x-application/json'
         });
         // Send data as JSON string.
         // Rows variable holds the result of the query.
         response.end(JSON.stringify(rows));
      });
   });
// Listen on the 8080 port.
}).listen(8080);

注意:MySQL连接正确,因为我通过PHP连接到我的数据库没有问题。

注意:我的js文件旁边有一个名为node_modules的文件夹,里面有我的mysql文件夹。

我尝试通过npm安装nodejs:

enter image description here

1 个答案:

答案 0 :(得分:2)

只有在发送了回复后才会结束request

您正在等待end事件而没有发送响应(因为该响应是从end处理程序中发送的,从而导致某种死锁情况。)

正如@vkurchatkin在评论中指出的那样,如果正在使用请求流,end处理程序将在完全消耗后被调用,而与响应状态无关。在这种情况下,请求根本没有消耗,这意味着只有在发送响应之后才会调用end处理程序(可能是请求拆除的一部分)。

因此完全删除end处理程序应解决问题:

http.createServer(function (request, response) {
  connection.query(..., function(error, rows, fields) {
    // TODO: handle `error`
    response.writeHead(200, {
      'Content-Type': 'x-application/json'
    });
    response.end(JSON.stringify(rows));
  });
});