MySQLとNode.js


376

Node.jsを使い始めました。私はPHPの出身ですので、データベースのすべてのニーズにMySQLを使用することにかなり慣れています。

MySQLをNode.jsで使用するにはどうすればよいですか?


5
何に行きましたか?以下にいくつかの良い情報があります。私はあなたの経験が何であったか聞いてみたいと思います
Landon

7
@Landonは、いくつかの理由で実際にnode-mysqlと一緒に使用されました。これは主にかなり活発に開発されているためであり、最も広く使用されているようです。multipleStatements機能も本当に気に入っています。
crawf

@crawf PHPとNode.jsのどちらが好きですか。私はPHP / MySQLに飛び乗りましたが、構文がJS構文であることを考えるとずっと自然に感じられるのでノードに切り替えることを考えています
oldboy

1
@Anthony個人的な好みだと思います。開発しているエコシステム、チームに所属しているかどうかなどに依存します。この元の投稿は古く、ノードランドスケープで多くの点が変更されており、フロントがはるかに一般的ですそしてバックエンド作業。Nodeを試してみる時間があれば、それはリアルタイムWebソケット用のsocket.ioなどと組み合わせるといいでしょう。
crawf '21 / 03/18

回答:


427

node.jsモジュールリストを確認する

  • node-mysql — MySQLプロトコルを実装するnode.jsモジュール
  • node-mysql2 —さらに別の純粋なJS非同期ドライバー。パイプライン化、準備されたステートメント。
  • node-mysql-libmysqlclient — libmysqlclientに基づくMySQL非同期バインディング

node-mysqlは十分に単純に見えます。

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'example.org',
  user     : 'bob',
  password : 'secret',
});

connection.connect(function(err) {
  // connected! (unless `err` is set)
});

クエリ:

var post  = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
  // Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'

81
node-mysqlの+1は、実際に準備されたステートメントを使用しないよりも使用しやすくします
Kevin Laity

2
トランザクション用のgithub.com/bminer/node-mysql-queues、およびnode-mysqlで使用するための複数ステートメントのサポート。
BMiner

2
node-mysqlの場合も+1。単にrequireJavaScriptライブラリを使用するよりも良いこと
Alex K

4
@KevinLaity node-mysqlにはまだ準備されたステートメントが実装されていないという印象を受けました。構文は似ています。代わりに、今のところ、特殊文字はエスケープされているようです。
Funseiki 2013

4
さらに、データベース名を取得して、接続オブジェクトに 'database'を追加できます
felipekm

29

node-mysqlは、MySQLデータベースでの作業に使用される最高のモジュールの1つであり、アクティブに維持され、十分に文書化されています。


20

これは古いスレッドなので、更新を追加するだけです。

MySQL node.jsドライバーをインストールするには:

だけを実行する場合はnpm install mysql、サーバーを実行するのと同じディレクトリにいる必要があります。次の例のように、それを行うことをお勧めします。

グローバルインストールの場合:

npm install -g mysql

ローカルインストールの場合:

1- package.json依存関係に追加します:

"dependencies": {
    "mysql": "~2.3.2",
     ...

2-実行 npm install


接続が行われるためには、mysqlサーバー(ノードに依存しない)も実行している必要があることに注意してください。

MySQLサーバーをインストールするには:

これを説明するチュートリアルがたくさんありますが、それは運用システムに少し依存しています。Googleにアクセスしてを検索してくださいhow to install mysql server [Ubuntu|MacOSX|Windows]。しかし、一言で言うと、http://www.mysql.com/downloads/にアクセスしてインストールする必要があります。


3
npm install --save mysqlインストールしてpackage.json自動的に追加します
Xeoncross

11

ここにあなたを助けるかもしれない生産コードがあります。

Package.json

{
  "name": "node-mysql",
  "version": "0.0.1",
  "dependencies": {
    "express": "^4.10.6",
    "mysql": "^2.5.4"
  }
}

これがサーバーファイルです。

var express   =    require("express");
var mysql     =    require('mysql');
var app       =    express();

var pool      =    mysql.createPool({
    connectionLimit : 100, //important
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'address_book',
    debug    :  false
});

function handle_database(req,res) {

    pool.getConnection(function(err,connection){
        if (err) {
          connection.release();
          res.json({"code" : 100, "status" : "Error in connection database"});
          return;
        }   

        console.log('connected as id ' + connection.threadId);

        connection.query("select * from user",function(err,rows){
            connection.release();
            if(!err) {
                res.json(rows);
            }           
        });

        connection.on('error', function(err) {      
              res.json({"code" : 100, "status" : "Error in connection database"});
              return;     
        });
  });
}

app.get("/",function(req,res){-
        handle_database(req,res);
});

app.listen(3000);

リファレンス:https : //codeforgeek.com/2015/01/nodejs-mysql-tutorial/


このコードはCannot read property 'release' of undefined
めちゃくちゃになって

4

Imo、MySQLの公式Node.jsドライバーであるMySQL Connector / Node.jsを試してみてください。詳細については、ref-1およびref-2を参照してください。ここで入手できるmysqljs / mysqlを試しましたが、このライブラリのクラス、メソッド、プロパティに関する詳細なドキュメントが見つかりません。

だから私は、標準に切り替えたMySQL Connector/Node.jsとのX DevAPIことですので、非同期の約束ベースのクライアントライブラリと優れたドキュメントを提供しています。次のコードスニペットを見てください。

const mysqlx = require('@mysql/xdevapi');
const rows = [];

mysqlx.getSession('mysqlx://localhost:33060')
.then(session => {
    const table = session.getSchema('testSchema').getTable('testTable');

    // The criteria is defined through the expression.
    return table.update().where('name = "bar"').set('age', 50)
        .execute()
        .then(() => {
            return table.select().orderBy('name ASC')
                .execute(row => rows.push(row));
        });
})
.then(() => {
    console.log(rows);
});

3

KnexJsは、Node.JSとブラウザの両方でSQLクエリビルダーとして使用できます。使いやすいと思います。試してみましょう-Knex.js

$ npm install knex --save
# Then add one of the following (adding a --save) flag:
$ npm install pg
$ npm install sqlite3
$ npm install mysql
$ npm install mysql2
$ npm install mariasql
$ npm install strong-oracle
$ npm install oracle
$ npm install mssql


var knex = require('knex')({
  client: 'mysql',
  connection: {
    host : '127.0.0.1',
    user : 'your_database_user',
    password : 'your_database_password',
    database : 'myapp_test'
  }
});

こんな風に使えます

knex.select('*').from('users')

または

knex('users').where({
  first_name: 'Test',
  last_name:  'User'
}).select('id')

1

複数のデータベースエンジンに共通のフレームワークを提供することを目的としたNode.js DBと呼ばれる新しい取り組みを試すこともできます。C ++でビルドされているため、パフォーマンスが保証されます。

具体的には、Node.js MySQLサポート用のdb-mysqlドライバーを使用できます。


1
ありがとう!私もやってみます。
crawf

4
node-dbはサポートされなくなり(8か月間非アクティブ、非推奨のnode-wafを使用)、インストールが失敗しました。
Yogu

18
「C ++で構築されているため、パフォーマンスが保証されます」-C ++を使用するだけではパフォーマンスが保証されないため、正しくプログラムする必要があります。
developerbmw

node-dbがサポートされていないだけでなく、リンクはひどいものです-ちょうど今ある種の広告サイトにリダイレクトされます。反対投票。
nurdglaw 2016年

2
@マリアーノ、リンクダウン
パチェリエ2017年

0

ライブラリをインストールしてmysqlデータベースに接続します。ここでは、安定した使いやすいnode-mysqlモジュールを選びました。

npm install mysql@2.0.0-alpha2

var http = require('http'),
   mysql = require('mysql');

var sqlInfo = {
   host: 'localhost',
   user: 'root',
   password: 'urpass',
   database: 'dbname'
}
client = mysql.createConnection(sqlInfo);

client.connect();

NodeJS mysqlの接続とクエリの例


2
私の知る限り、アルファ版のリリースは「安定」しているとは考えられていません。私が間違っていたら訂正してください。Alphaは最終版に進む前にAPIを劇的に変更する可能性があり、本番(および開発)コードでは非常に望ましくありません。つまり、バージョン番号がsemver.orgのガイドラインに従っている場合です。
ロビンファンバーレン2013

1
「賢い」引用符( '')は、jsファイルではそれほど賢くないことがわかります。
グリフ2014

このコメントが好きなのは、データベース名の場所を示しているためです
Boris Ivanov

0

あなたはORM、ビルダーなどをスキップし、使用してDB / SQLの管理を簡素化することができますsqlerし、sqler-mdb

-- create this file at: db/mdb/setup/create.database.sql
CREATE DATABASE IF NOT EXISTS sqlermysql
const conf = {
  "univ": {
    "db": {
      "mdb": {
        "host": "localhost",
        "username":"admin",
        "password": "mysqlpassword"
      }
    }
  },
  "db": {
    "dialects": {
      "mdb": "sqler-mdb"
    },
    "connections": [
      {
        "id": "mdb",
        "name": "mdb",
        "dir": "db/mdb",
        "service": "MySQL",
        "dialect": "mdb",
        "pool": {},
        "driverOptions": {
          "connection": {
            "multipleStatements": true
          }
        }
      }
    ]
  }
};

// create/initialize manager
const manager = new Manager(conf);
await manager.init();

// .sql file path is path to db function
const result = await manager.db.mdb.setup.create.database();

console.log('Result:', result);

// after we're done using the manager we should close it
process.on('SIGINT', async function sigintDB() {
  await manager.close();
  console.log('Manager has been closed');
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.