我可以在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:
答案 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));
});
});