首页 > 解决方案 > 如何修复“用户 \'root\'@\'localhost\' 的访问被拒绝,错误号 1045

问题描述

我正在将 MySQL 数据库连接到我的 NODEJS 应用程序。每次启动服务器时都会出现错误,使用密码 YES 拒绝用户 'root'@'localhost' 的访问,错误号 1045

我发现很多开发人员都问过同样的问题,但他们都没有相同的答案,而且我已经完成了我找到的所有工作。我尝试释放连接,重新启动 phpMyAdmin,删除具有相同主机名的用户和数据库。node、express、mysql、mysqljs的版本都是最新版本。并在代码中查找了大约 6 个小时,试图找到 js 或 sql 中的任何语法错误。

const http = require('http');
const express = require('express');

const path = require('path');

const mysql = require('mysql');
const port = process.env.port || 3000;
const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '123456',
    database: 'nodemysql'
    //port: port
});

db.connect((err) => {
    if (err) {
        console.log('error when connecting to db:', err);
        throw err;
    }
    console.log('MySql is Connected');
});

const app = express();

app.get('/profile', (req, res) => {

    console.log(result);
    res.sendFile(path.join(__dirname + '/profile.html'));
});

app.get('/createdb', (req, res) => {
    let sql = 'CREATE DATABASE nodemysql';
    db.query(sql, (err, result) => {
        if (err) {
            throw err;
        }
    })

});
//app.use(express.json());

app.listen(port, () => console.log(`listening on port ${port}...`));

package.json 看起来像这样:

  {
   "name": "community",
   "version": "1.0.0",
   "description": "",
     "main": "app.js",
     "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "author": "Omar AbdelFattah",
     "license": "ISC",
     "dependencies": {
       "express": "^4.16.4",
       "mysql": "^2.17.1",
       "mysqljs": "0.0.2-security"
     }
   }

预期的输出是,如果我在终端中运行“nodemon app.js”或“node app”或其他任何东西,服务器将运行,然后我使用两个端点之一打开显示 HTML 文件或连接到数据库。

实际结果是发生错误:'Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)' 但服务器运行!并执行“app.listen()”函数。

标签: javascriptmysqlnode.jsexpress

解决方案


当用户没有数据库权限(不太可能是 root 和 localhost)或密码错误时,会输出错误 #1045。listen无论如何都会调用该事件,此流程的结构方式失败的数据库连接只会引发错误,它不会停止服务器。
在搜索更深层次的问题之前,您可以尝试重置您的 root 密码(如果可能,从终端)。


推荐阅读