我有一个简单的虚拟主机帐户,最近我升级了服务器以启用Node.JS。我没有问题,可以使用PHP连接到MySQL并执行查询。但是我正在尝试使用Node.js构建一个小型应用程序,并且连接到MySQL似乎是不可能的。有人可以告诉我我在做什么错吗? Node实例似乎一直在运行脚本路径。它提供了我要使用的端口26515,如果我运行一个较小的程序,就可以使用该端口。
Restarting /home/www/tannerbabcock.com/app/sql.js. { Error: connect EACCES 127.0.0.1:3306 - Local (0.0.0.0:0) at Object._errnoException (util.js:992:11) at _exceptionWithHostPort (util.js:1014:20) at internalConnect (net.js:960:16) at defaultTriggerAsyncIdScope (internal/async_hooks.js:284:19) at GetAddrInfoReqWrap.emitLookup [as callback] (net.js:1106:9) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:97:10) -------------------- at Protocol._enqueue (/home/www/tannerbabcock.com/node_modules/mysql/lib/protocol/Protocol.js:144:48) at Protocol.handshake (/home/www/tannerbabcock.com/node_modules/mysql/lib/protocol/Protocol.js:51:23) at Connection.connect (/home/www/tannerbabcock.com/node_modules/mysql/lib/Connection.js:118:18) at app.get (/home/www/tannerbabcock.com/app/sql.js:15:13) at Layer.handle [as handle_request] (/home/www/tannerbabcock.com/node_modules/express/lib/router/layer.js:95:5) at next (/home/www/tannerbabcock.com/node_modules/express/lib/router/route.js:137:13) at Route.dispatch (/home/www/tannerbabcock.com/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/home/www/tannerbabcock.com/node_modules/express/lib/router/layer.js:95:5) at /home/www/tannerbabcock.com/node_modules/express/lib/router/index.js:281:22 at Function.process_params (/home/www/tannerbabcock.com/node_modules/express/lib/router/index.js:335:12) code: 'EACCES', errno: 'EACCES', syscall: 'connect', address: '127.0.0.1', port: 3306, fatal: true }
这是我的代码。 node_modules
与该文件(/home/www/tannerbabcock.com/app/sql.js
)不在同一目录中,但在父目录(/home/www/tannerbabcock.com/node_modules
)中。我只希望该程序输出“博客”表的内容。
var express = require("express"),
mysql = require("mysql");
app = express();
app.use(express.static("public"));
var connection = mysql.createConnection({
host: "localhost",
user: "my_username",
password: "my_password",
database: "my_database"
});
app.get("/", (req, res) => {
connection.connect((err, conn) => {
if (err) {
return console.error(err);
}
});
connection.query("SELECT * FROM `blog`", (err, rows, fields) => {
if (err) {
return console.error(err.message);
}
res.write("<html><head><title>Node.js App</title></head><body><table><tbody>");
for (var i = 0; i < rows.length; i++) {
res.write("<tr><td>" + rows[i].id + "</td><td>" + rows[i].title + "</td><td>" + rows[i].body + "</td><td>" + rows[i].tag + "</td><td>" + rows[i].comp + "</td></tr>");
}
res.end("</tbody></table></body></html>");
});
connection.end();
});
var server = app.listen(26515, "198.23.49.48");
我一直在关注MySQL Node.js示例,但似乎没有一个对我有帮助。
答案 0 :(得分:1)
我认为问题是异步性。您正在发送查询而未获得连接。在连接的回调中检索连接。用这种方法,您还没有连接。
类似的事情可能起作用:
app.get("/", (req, res) => {
connection.connect((err) => {
if (err) {
return console.error(err);
}
connection.query("SELECT * FROM `blog`", (err, rows, fields) => {
if (err) {
return console.error(err.message);
}
res.write("<html><head><title>Node.js App</title></head><body><table><tbody>");
for (var i = 0; i < rows.length; i++) {
res.write("<tr><td>" + rows[i].id + "</td><td>" + rows[i].title + "</td><td>" + rows[i].body + "</td><td>" + rows[i].tag + "</td><td>" + rows[i].comp + "</td></tr>");
}
res.end("</tbody></table></body></html>");
});
connection.end();
});
});
var server = app.listen(26515, "198.23.49.48");