无法通过Node.js / Express连接到MySQL

时间:2018-08-19 20:37:59

标签: mysql node.js express

我有一个简单的虚拟主机帐户,最近我升级了服务器以启用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示例,但似乎没有一个对我有帮助。

1 个答案:

答案 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");