如何让node.js和mysql一起工作?

时间:2013-12-24 02:18:22

标签: mysql node.js node-mysql

提前感谢您的帮助!

我正在创建一个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'

5 个答案:

答案 0 :(得分:3)

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

    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...
});

答案 1 :(得分:1)

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

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

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

在'port'处查看https://github.com/felixge/node-mysql#connection-options

要在Linux或Mac OS上的your_MySQL_port中插入 MySQL端口,只需打开一个类型的终端:

ps ax | grep mysqld

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

在这个例子中,您的代码应如下所示:

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

答案 2 :(得分:1)

在使用Node进入MySQL之前,你可能想要阅读一些关于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
});

答案 3 :(得分:0)

我面临同样的问题所以我如何解决它......

Mysql Part

1-I have already installed wamp and can access to phpmyadmin.
2-Using phpmyadmin i have created a database and a table say it users(please insert 2,3 rows data using insert menu option) look like 
check 

> http://prntscr.com/72gsxc

3-Make sure wamp is running and mysql service is also running. 
4-Click wamp and mouseover MYSQL and then click my.ini and search there port by default it is 3306.

节点部分



    var pool =  mysql.createPool({
        host     : 'localhost',
        user     : 'root',
        password : '',
        database : 'cricstream_2',
        port     : 3306
    });

    var readTable = 'SELECT * FROM countries';

        pool.getConnection(function(error, connection){ 
          connection.query(readTable, function(err, rows){
            if(err) throw err;
            else { 
                console.log(rows);
            }
          });
         });

答案 4 :(得分:0)

  

我是否必须创建数据库然后创建表?

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

  

有没有办法在别处创建数据库,以便每次重新启动应用程序时都不会删除它?

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