【问题标题】:My connection between my node.js index for a website and mysql is not working我的网站 node.js 索引和 mysql 之间的连接不起作用
【发布时间】:2019-06-02 09:32:36
【问题描述】:

我正在为一个学校项目建立一个网站,我正在尝试在 mysql 和我的项目之间建立连接。 我不知道为什么,但它没有连接,也没有创建数据库

我已经有了用户 mtsports,他的密码是 1234,我给了他所有访问权限。

index.js

const path = require('path');
const express = require('express');
const bodyParser = require('body-parser');
var expressSanitizer = require('express-sanitizer');
var mysql = require('mysql');
const app = express();
const routes = require('./routes/routes');
app.use(bodyParser.urlencoded({extended : true}));
app.use(expressSanitizer());
const session = require('express-session');
const PORT = 3000;

app.use(express.static(path.join(__dirname, 'public')));
app.set('view engine', 'pug');
app.engine('html', require('ejs').renderFile);
app.set('views', './views');

app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: false
}));


// Instancia da BD
var con = mysql.createConnection({
host: "localhost:3306",
user: "mtsports",
password: "1234"
});

con.connect(function(err) {
if (err){ //TODO : Conexão da BD
    console.log(err);
    return;
}else{
    console.log("Connected!");
}  
con.query("CREATE DATABASE mydb", function (err, result) {
  if (err) throw err;
  console.log("Database created");
});
});

//app.use('/', routes);

app.listen(PORT, () => {
console.log('À escuta na porta ' + PORT);
});

app.get('/', (req, res) => {
res.render(__dirname + '/views/home.pug');
});

错误:

{ Error: getaddrinfo ENOTFOUND localhost:3306 localhost:3306:3306 at errnoException (dns.js:50:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:92:26) ---------------------------- at Protocol._enqueue (C: \Users\andre\DocumentsV'llSports\node_modules\mysql\lib\protocol\Protocol .15:144:48) at Protocol.handshake (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\protocol\Protocol.js:S1:23) at Connection.connect (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\Connection.js:118:18) at Object.<anonymous> (C:\Users\andre\Documents\MTSports\index.js:32:5) at Module._compile (module.js:652:30) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32) at tryModuleLoad (module.js:505:12) at Function.Module._load (module.js:497:3) at Function.Module.runMain (module.js:693:10) code. 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo', hostname: 'localhost:3306', host: 'localhost:3306', port: 3306, fatal: true

更新

当我改变host: "127.0.0.1"

var con = mysql.createConnection({
host: "127.0.0.1",
user: "mtsports",
password: "1234"
});

这是出现的错误:

{ 错误:ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持 服务器请求的认证协议;考虑升级 MySQL 客户 在 Handshake.Sequence._packetToError (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14) 在 Handshake.ErrorPacket (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\protocol\sequences\Handshake.js:124:18) 在 Protocol._parsePacket (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\protocol\Protocol.js:278:23) 在 Parser.write (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\protocol\Parser.js:76:12) 在 Protocol.write (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\protocol\Protocol.js:38:16) 在套接字。 (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\Connection.js:91:28) 在套接字。 (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\Connection.js:502:10) 在 emitOne (events.js:116:13) 在 Socket.emit (events.js:211:7) 在 addChunk (_stream_readable.js:263:12) -------------------- 在 Protocol._enqueue (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\protocol\Protocol.js:144:48) 在 Protocol.handshake (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\protocol\Protocol.js:51:23) 在 Connection.connect (C:\Users\andre\Documents\MTSports\node_modules\mysql\lib\Connection.js:118:18) 在对象。 (C:\Users\andre\Documents\MTSports\index.js:32:5) 在 Module._compile (module.js:652:30) 在 Object.Module._extensions..js (module.js:663:10) 在 Module.load (module.js:565:32) 在 tryModuleLoad (module.js:505:12) 在 Function.Module._load (module.js:497:3) 在 Function.Module.runMain (module.js:693:10) code: 'ER_NOT_SUPPORTED_AUTH_MODE', errno: 1251, sqlMessage: '客户端不支持认证协议 服务器请求;考虑升级 MySQL 客户端', sqlState: '08004',致命的:真 }

【问题讨论】:

  • 你可以尝试将 localhost:3306 删除为 localhost
  • 我试过但还是不行
  • 你可以通过mysql工作台连接到你的数据库吗?并运行调试器并查看哪个部分引发了错误。
  • 我通过 mysql 连接并且它工作正常,但是当我尝试连接我的文件 index.js 时 ir 不工作
  • 我已经尝试使用 root 用户但仍然无法正常工作

标签: mysql node.js


【解决方案1】:

请尝试更正您的 MySQL 连接配置。删除主机字段中的端口,将端口作为单独的字段提供。同时提供您的数据库名称(可选)。
var con = mysql.createConnection({ host: "localhost", user: "mtsports", port: "3306", database: "dbname", password: "1234" });

【讨论】:

    【解决方案2】:

    似乎 mysql 包存在一个正在进行的配置问题。也许你可以试试这个我用于工作/学校项目的 npm mysql 库。 click here

    更新 #1

    登录到您的 mysql 工作台 > 转到“用户和权限”设置找到您要登录的用户,将“从主机”更改为“%”

    % 表示通配符,mysql 将允许来自所有 IP 地址的连接

    【讨论】:

    • 是的,但是你试过使用这个 npm 吗?这个 npm 是 mysql 之上的一个包装器,它可以正常工作
    • @MiguelSousa 问题出在你的mysql权限设置上。
    • 用解决方案编辑了我的答案,试一试,如果您还有问题,请告诉我
    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多