【问题标题】:How to make node.js and mysql work together?如何让 node.js 和 mysql 一起工作?
【发布时间】:2014-01-12 06:57:13
【问题描述】:

提前感谢您的帮助!

我正在制作一个 node/express 应用程序,我想使用一个 mysql 数据库。但我似乎无法连接到数据库。

我知道我应该使用 node-mysql 模块 (https://github.com/felixge/node-mysql),但我一定做错了。

我对此完全陌生。我必须创建一个数据库然后创建一个表吗?有没有办法在其他地方创建一个数据库,这样每次我重新启动应用程序时它都不会被删除?

这是我的代码。有人可以回答上面的问题并在下面告诉我我做错了什么吗?谢谢!

var express = require('express'),
  routes = require('./routes'),
  user = require('./routes/user'),
  http = require('http'),
  io = require('socket.io'),
  path = require('path');

var app = express();
var server = http.createServer(app);
sio = io.listen(server);

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

server.listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});


var mysql      = require('mysql');
var connection = mysql.createConnection({
  user     : 'me',
  password : 'secret',
  host     : 'localhost',
  port     : app.get('port')
});

connection.connect();

connection.query('CREATE TABLE tesTable (integer int, textfield VARCHAR(100), PRIMARY KEY(integer))',
                  function(err, result){
                      if(err) {
                          console.log(err);
                      } else {
                          console.log("Table testTable Created");
                      }
                  });

顺便说一下,在package.json中,我列出了

"mysql": "2.0.0-rc2" 

作为依赖并做了

'npm install'

【问题讨论】:

  • 你的 sql server 监听的端口是什么?很可能不是您的驱动程序试图达到的 3000。

标签: mysql node.js node-mysql


【解决方案1】:

您可以像往常一样在数据库中创建表,并且它会足够持久,不会在您重新启动应用程序时被删除。如果需要,可以使用以下代码连接到数据库:

    var mysql = require('mysql');

app.use( connection(mysql, {
    host: 'myhost',
    user: 'user_name',
    password: 'password',
    port: 3306,          //port mysql
    database: 'database_name',
    multipleStatements: 'true'  //false by default

}, 'pool'));

req.getConnection(function(err, connection) {
    connection.query("SELECT * FROM `table_name`;",function (error,row){
        if(!error){
                       //do something.....
        }
        else console.log("Error : "+err);
        });
    //do something else...
});

【讨论】:

    【解决方案2】:

    除了关于任何错误的问题之外,我的第一个建议是你应该试试这个

    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      user     : 'me',
      password : 'secret',
      host     : 'localhost',
      port     : your_MySQL_port
    });
    

    您给定示例中的 port: app.get('port') 返回您的 http 服务器端口,但不是您的 MySQL 服务器的端口。

    在“端口”检查https://github.com/felixge/node-mysql#connection-options

    要让您的 MySQL 端口 在 Linux 或 Mac OS 上插入 your_MySQL_port,只需打开终端输入:

    ps ax | grep mysqld
    

    因此,您将在生成的输出中看到类似--port=1234 的内容。在这种情况下,1234your_MySQL_port

    在此示例中,您的代码应如下所示:

    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      user     : 'me',
      password : 'secret',
      host     : 'localhost',
      port     : 1234
    });
    

    【讨论】:

    • 谢谢!我怎么知道那个端口是什么?或者我可以直接写那个字符串吗?
    • 你确定?他早些时候打电话给app.set('port', process.env.PORT || 3000);
    • 我认为您可以在 phpMyAdmin 或您启动 MySQL 服务器的位置看到您的端口。 @AaronClayton-Dunn
    • @SB。他用 app.get('port') 开始了他的 http,我不认为它和他的 MySQL 服务器一样。但是没有任何错误,我只能猜到有问题。
    • 默认是3306,所以需要使用port: 3306(或者根本不指定端口)
    【解决方案3】:

    在开始使用 Node 之前,您可能需要阅读一些关于 MySQL 的一般教程,但如果您有冒险精神,这里有一个非常简短的教程,介绍了我将如何在我的机器上设置 MySQL。

    我假设您可以访问 MySQL shell。如果您使用的是前端,则过程可能会有所不同。

    安装 MySQL 并配置帐户后,您需要使用命令登录 MySQL shell

    mysql -u me -p
    

    出现提示时,后跟 MySQL 用户的密码。

    接下来,您需要创建一个数据库。你可以用命令来做到这一点

    create database mydatabase;
    

    然后

    use mydatabase;
    

    接下来,您将要创建一个表。在 shell 中运行 CREATE TABLE 查询以设置表。您可以在 Node 中执行此操作,但是每次启动应用程序时都会不必要地运行该命令。

    现在您应该可以使用node-mysql 进行连接了

    var connection = mysql.createConnection({
      user     : 'me',
      password : 'secret',
      host     : 'localhost',
      database : 'mydatabase',
      port     :  3306 // or whatever your mysql port is
    });
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,所以我如何解决它......

      Mysql部分

      1-我已经安装了 wamp 并且可以访问 phpmyadmin。 2-使用 phpmyadmin 我创建了一个数据库和一个表说它的用户(请使用插入菜单选项插入 2,3 行数据)看起来像 查看 > http://prntscr.com/72gsxc 3-确保 wamp 正在运行并且 mysql 服务也在运行。 4-单击 wamp 并将鼠标悬停在 MYSQL 上,然后单击 my.ini 并在此处搜索端口,默认情况下为 3306。

      节点部分

      var pool = mysql.createPool({ 主机:'本地主机', 用户:'root', 密码 : '', 数据库:'cricstream_2', 端口:3306 }); var readTable = 'SELECT * FROM countries'; pool.getConnection(函数(错误,连接){ connection.query(readTable, function(err, rows){ if(err) 抛出错误; 别的 { 控制台.日志(行); } }); });

      【讨论】:

        【解决方案5】:

        我必须先创建数据库,然后再创建表吗?

        是的,你应该提前创建数据库和表,这是正确的。

        有没有办法在其他地方创建一个数据库,这样每次我重新启动应用程序时它都不会被删除?

        是的,您通常在计算机上安装 MySQL 服务器,此安装管理一系列数据库,您可以删除/备份/复制等,并创建新数据库。您的 NodeJS 应用程序只会连接到您的 MySQL 服务器安装。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-22
          • 1970-01-01
          • 2010-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-01
          • 2017-06-11
          相关资源
          最近更新 更多