Node.js 无法连接 MySQL、PHPMyAdmin

Posted

技术标签:

【中文标题】Node.js 无法连接 MySQL、PHPMyAdmin【英文标题】:Node.js doesnot connect with MySQL, PHPMyAdmin 【发布时间】:2016-12-23 09:12:48 【问题描述】:

我正在尝试登录一个使用 mysql 存储用户名和密码的系统,但登录页面在 manager.js 文件中,如下所示:

var express = require('express');
var router = express.Router();
var async = require('async');

var util = require('../utils/util');
var db = require('../utils/database');
var connection = db.connection();

router.get('/login', function (req, res) 
  if (req.session.manager) 
    return res.redirect('/');
  

  if (req.query.tip == 'error') 
    var tip = 'username or password incorrect!';
   else 
    var tip = null;
  
  res.render('login',  tip: tip );
);

router.post('/login', function (req, res) 
  var username = req.body.username;
  var password = req.body.password;
  var sql = 'SELECT * FROM restaurant_accounts WHERE ra_name=?';
  connection.query(sql, [username], function (err, result) 
    if (err) throw err;
    if (result.length == 0) 
      return res.redirect('/manager/login?tip=error');
     
    var account = result[0];
    if (!util.checkHash(password, account.ra_password)) 
      return res.redirect('/manager/login?tip=error');
    

    connection.query('SELECT * FROM restaurants WHERE rest_owner_id=?', [account.ra_id], function (err, result) 
      if (err) throw err;
      var restaurant = result[0];
      req.session.manager = 
        id: account.ra_id,
        name: account.ra_name,
        rest_id: restaurant.rest_id,
        rest_name: restaurant.rest_name
      ;
      res.redirect('/');
    );
  );
);

router.get('/logout', function (req, res) 
  req.session.destroy();
  res.redirect('/manager/login');
);

module.exports = router;

当我在浏览器上输入 localhost:80 并运行 express 服务器时,它会显示以下屏幕:

现在用户名和密码应该存储在其他人创建的 mysql 数据库中,我使用 phpmyadmin 添加数据库并对其具有完全访问权限。但是当然由于数据库没有链接,我无法通过这个登录页面,它显示“localhost拒绝连接”错误!

以下是我的控制台输出在我尝试登录页面之前

C:\Mrestro\RESTaurant_backend-master\rest-server>node bin\www
Express server listening on port 80
GET /manager/login 304 23ms
GET /css/bootstrap.css 304 7ms
GET /css/main.css 304 6ms
GET /js/jquery.min.js 304 11ms
GET /images/bg.jpg 304 2ms

当我输入随机用户名和密码时,输出如下:

C:\Mrestro\RESTaurant_backend-master\rest-server>node bin\www
Express server listening on port 80
GET /manager/login 304 23ms
GET /css/bootstrap.css 304 7ms
GET /css/main.css 304 6ms
GET /js/jquery.min.js 304 11ms
GET /images/bg.jpg 304 2ms
C:\Mrestro\RESTaurant_backend-master\rest-server\web\manager.js:27
    if (err) throw err;
             ^

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'bjtu'@'localhost' (using password: YES)
    at Handshake.Sequence._packetToError (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\protocol\sequences\Sequence.js:51:14)
    at Handshake.ErrorPacket (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\protocol\sequences\Handshake.js:103:18)
    at Protocol._parsePacket (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\protocol\Protocol.js:280:23)
    at Parser.write (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\protocol\Parser.js:74:12)
    at Protocol.write (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\protocol\Protocol.js:39:16)
    at Socket.<anonymous> (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\Connection.js:109:28)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at readableAddChunk (_stream_readable.js:153:18)
    at Socket.Readable.push (_stream_readable.js:111:10)
    --------------------
    at Protocol._enqueue (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\protocol\Protocol.js:141:48)
    at Protocol.handshake (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\protocol\Protocol.js:52:41)
    at Connection.connect (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\Connection.js:136:18)
    at Connection._implyConnect (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\Connection.js:467:10)
    at Connection.query (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\mysql\lib\Connection.js:212:8)
    at Object.handle (C:\Mrestro\RESTaurant_backend-master\rest-server\web\manager.js:26:14)
    at next_layer (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\express\lib\router\route.js:103:13)
    at Route.dispatch (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\express\lib\router\route.js:107:5)
    at C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\express\lib\router\index.js:195:24
    at Function.proto.process_params (C:\Mrestro\RESTaurant_backend-master\rest-server\node_modules\express\lib\router\index.js:251:12)

C:\Mrestro\RESTaurant_backend-master\rest-server>

那么,我的问题是我应该使用什么用户名和密码?在数据库中哪里可以找到正确的?

编辑: database.js

var mysql = require('mysql');
var c = mysql.createConnection(
  host     : 'localhost',
 // port     : '3306',
  user     : 'root',
  password : 'root',
  database : 'restaurant'

);

// enable error logging for each connection query
c.on('error', function(err) 
  console.log(err.code); // example : 'ER_BAD_DB_ERROR'
);

exports.connection = function() 
    return c;
;

【问题讨论】:

不要将此处的登录名与您的数据库凭据混淆。那是两个不同的东西。因此,找出您需要在此代码中添加数据库凭据的位置,然后从那里的 phpmyadmin 填写您的凭据,看看它是否正常工作。要在这里登录,您需要来自该系统的用户名/密码。这可能在手册或安装说明中。 utils/database 文件有错误你能告诉我们吗? 是的,我在上面的编辑中添加了 database.js 文件。 我尝试使用 database.js 文件中给出的用户名和密码为“root”登录 manager.js,但它显示用户名或密码不正确的消息。 @owaishanif786 最后一个问题,请您帮帮我好吗?在此先感谢:) 【参考方案1】:

在 ../utils/database 中将用户名设置为“root”并将密码留空或“”作为 Windows 灯和 xamp 设置中的默认设置。编辑

var mysql = require('mysql');
var c = mysql.createConnection(
  host     : 'localhost',
 // port     : '3306',
  user     : 'root',
  password : '',
  database : 'restaurant'

);

// enable error logging for each connection query
c.on('error', function(err) 
  console.log(err.code); // example : 'ER_BAD_DB_ERROR'
);

exports.connection = function() 
    return c;
;

【讨论】:

是的,我已经在上面的编辑中添加了 database.js 文件。 登录页面不接受空密码字段。它显示错误:“请填写此字段。” 哪个登录页面?转到 localhost/phpmyadmin 并检查在那里工作的凭据 数据库中的表为空。凭据需要添加到 phpmyadmin 的数据库中。但是那里设置的用户名和密码在登录页面上不起作用。我在这里没有得到什么? 只回答这个简单的事情。当您转到此页面“localhost/phpmyadmin”时,用户名和密码是什么,我没有询问应用程序或任何其他密码。

以上是关于Node.js 无法连接 MySQL、PHPMyAdmin的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序在本地运行时,Node.js 能够连接到 MySQL 容器,但当应用程序在容器中运行时无法连接

重现 MySQL 错误:服务器关闭连接(node.js)

Node.js 无法对 MySQL 8.0 进行身份验证

如何让我的 Node.js MySQL 连接作为承诺工作?

Node.js无法对MySQL 8.0进行身份验证

通过 Node JS 连接 AWS MySQL 数据库