【问题标题】:How to connect node.js localhost at port 80 with apache mysql at port 90?如何将端口 80 的 node.js localhost 与端口 90 的 apache mysql 连接?
【发布时间】:2016-08-16 17:22:32
【问题描述】:

我正在尝试使用 node.js 访问 mysql 数据库。我只是在 cmd 提示符下运行以下命令:

C:\rest-server> node bin/www

它会显示此消息:

Express server listening in port 80

我的 .js 文件如下,本地主机访问端口 80:

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 时,它会显示以下屏幕:

当然,由于数据库没有链接,我无法通过这一步,它显示“localhost拒绝连接”错误!

我已经有一个 .sql 数据库,其中创建了必要的表。如何链接这两个以便我可以从登录页面登录?

编辑:database.js

var mysql = require('mysql');
var c = mysql.createConnection({
  host     : 'localhost',
  user     : 'bjtu',
  password : 'bjtu',
  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;
};

SAMPLE.JS 的控制台错误

if (err) throw err;
           ^

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'me'@'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 Object.<anonymous> (C:\Mrestro\RESTaurant_backend-master\rest-server\utils\sample.js:9:12)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)
    at startup (node.js:139:18)

【问题讨论】:

    标签: php mysql node.js apache


    【解决方案1】:

    npm 模块 mysql 应该可以解决问题。

    基本连接如下所示:

    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'me',
      password : 'secret',
      database : 'my_db'
    });
    
    connection.connect();
    
    connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
      if (err) throw err;
    
      console.log('The solution is: ', rows[0].solution);
    });
    
    connection.end();
    

    您可能很快就会想看看MongoDB.,例如,您可以使用模块mongoose 连接到它。

    更新:

    尝试在 database.js 中为您的连接对象设置端口。像这样:

    var mysql = require('mysql');
    var c = mysql.createConnection({
      host     : 'localhost',
      user     : 'bjtu',
      password : 'bjtu',
      database : 'restaurant',
      port     : 90
    });
    
    // 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;
    };
    

    默认端口是 3306,看起来不像你的情况 :)

    我建议你研究一下 mysql 池。

    【讨论】:

    • 我已经创建了一个模块 database.js,如上面的 EDIT 中所示,现在我如何使用它来登录? Express 服务器访问上面的第一个 .js 文件,并且不接受来自 database.js 的用户名和密码,只是说“无法访问此站点。Localhost 拒绝连接。”我在这里想念什么?我必须以某种方式连接这两个 .js 文件吗?
    • 我在控制台中运行了“node database.js”命令,它没有显示任何消息。它等待一分钟并再次显示目录路径。没有说建立连接或任何东西。请帮忙!
    • 我在您的 database.js 文件中没有看到这些 console.logs。您的代码看起来接近工作,我可以建议安装节点检查器并调试您的应用程序。
    • 是的,MySQL 正在使用端口 3306,如 wampserver 所示。但是每当我在浏览器中执行 localhost:3306 时,它只会下载一个无扩展名的文件并且什么都不做!有什么问题吗?
    • 我对 database.js 使用了节点检查器,在 localhost:5858 它只显示类型:连接和 v8、协议版本等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2016-09-30
    • 2012-02-06
    • 1970-01-01
    • 2011-08-14
    • 2014-02-20
    • 2012-02-12
    相关资源
    最近更新 更多