Node.js ile MySQL


375

Az önce Node.js'ye girmeye başladım. Ben bir PHP arka plan geliyor, bu yüzden oldukça benim tüm veritabanı ihtiyaçları için MySQL kullanmaya alışkınım.

MySQL'i Node.js ile nasıl kullanabilirim?


5
ne ile sonuçlandın? Aşağıda bazı iyi bilgiler var, deneyimlerinizin ne olduğunu duymak isterdim
Landon

7
@Landon, aslında oldukça aktif bir gelişme içerdiğinden ve en yaygın kullanılan gibi göründüğü için birkaç nedenden dolayı node-mysql ile gitti. Ayrıca multipleStatementsişlevi gerçekten seviyorum .
0'da tarama

@crawf Ne tercih edersiniz, PHP veya Node.js? PHP / MySQL'e girdim, ancak sözdiziminin JS sözdizimi olduğunu düşündüğümde çok daha doğal hissedeceği için düğüme geçmeyi düşünüyorum
oldboy 19

1
Sanırım kişisel tercih, içinde bulunduğunuz ekosisteme, eğer bir takımdaysanız vb. Bağlıdır. Bu orijinal yazı eskidir ve ön için çok daha yaygın olan Düğüm manzarasında çok şey değişmiştir. ve arka uç çalışması. Düğüme bir şans vermek için vaktiniz varsa ve bunun gerçek zamanlı web soketleri için socket.io gibi şeylerle eşleştirilmiş olduğunu söyleyebilirim.
18'de

Yanıtlar:


426

Node.js modül listesine göz atın

node-mysql yeterince basit görünüyor:

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

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

Sorguları:

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
Düğüm-mysql için +1 aslında hazırlanmış ifadeleri kullanmamaktan daha kolay hale getirir
Kevin Laity

2
İşlemler için github.com/bminer/node-mysql-queues ve node-mysql ile kullanım için çoklu deyim desteği.
BMiner

2
Düğüm-mysql için +1 de. requireBir javascript kütüphanesi ing'den daha iyi ne olabilir
Alex K

4
@KevinLaity Düğüm-mysql'in henüz hazırlanmış ifadeler hazırladığı izlenimi altındaydım . Sözdizimi sadece benzer görünüyor . Bunun yerine, şimdilik özel karakterlerden kaçılıyor gibi görünüyor.
funseiki

4
Ayrıca, bağlantı nesnesine 'veritabanı' ekleyerek veritabanı adınızı alabilirsiniz
Felipekm

28

node-mysql muhtemelen aktif olarak korunan ve iyi belgelenmiş MySQL veritabanı ile çalışmak için kullanılan en iyi modüllerden biridir.


19

Bu eski bir iş parçacığı olduğu için bir güncelleme ekliyoruz:

MySQL node.js sürücüsünü yüklemek için:

Sadece npm install mysqlçalışırsanız, sunucunuzu çalıştırdığınız dizinde olmanız gerekir. Aşağıdaki örneklerden birindeki gibi yapmanızı tavsiye ederim:

Global kurulum için:

npm install -g mysql

Yerel kurulum için:

1- package.jsonBağımlılıklarınıza ekleyin :

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

2- koş npm install


Bağlantıların gerçekleşmesi için ayrıca (düğümden bağımsız olan) mysql sunucusunu çalıştırmanız gerekeceğini unutmayın.

MySQL sunucusunu kurmak için:

Orada bunu açıklayan bir sürü öğretici var ve bu biraz operatif sisteme bağlı. Google'a gidin ve arayın how to install mysql server [Ubuntu|MacOSX|Windows]. Ancak bir cümle ile: http://www.mysql.com/downloads/ adresine gitmeli ve yüklemelisiniz.


2
npm install --save mysqlpackage.jsonotomatik olarak ekleyecek
Xeoncross

10

İşte size yardımcı olabilecek üretim kodu.

Package.json

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

İşte Sunucu dosyası.

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

Referans: https://codeforgeek.com/2015/01/nodejs-mysql-tutorial/


Bu kod berbat görünüyor .. dahil olmak üzere birçok hataCannot read property 'release' of undefined
Pacerier

3

KnexJ'ler hem Node.JS'de hem de tarayıcıda bir SQL sorgu oluşturucu olarak kullanılabilir. Kullanımı kolay buluyorum. Deneyin - 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'
  }
});

Bu şekilde kullanabilirsiniz

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

veya

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

3

Imo, MySQL için resmi Node.js sürücüsü olan MySQL Connector / Node.js'yi denemelisiniz. Bkz ref-1 ve ref-2 ayrıntılı bir açıklama için. Burada bulunan mysqljs / mysql denedim , ama bu kütüphanenin sınıfları, yöntemleri, özellikleri hakkında ayrıntılı belgeler bulamıyorum.

Bu yüzden standardına geçiş MySQL Connector/Node.jsile X DevAPIbir olduğu için, asenkron Promise tabanlı istemci kitaplığı ve iyi belgeler sağlar. Aşağıdaki kod snippet'ine bir göz atın:

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

1

Ayrıca , çeşitli veritabanı motorları için ortak bir çerçeve sağlamayı amaçlayan Node.js DB olarak bilinen daha yeni bir çabayı da deneyebilirsiniz . C ++ ile üretilmiştir, böylece performans garanti edilir.

Özellikle Node.js MySQL desteği için db-mysql sürücüsünü kullanabilirsiniz .


1
Teşekkürler! Bunu ben de deneyeceğim.
tarama

4
node-db artık desteklenmiyor (8 ay boyunca aktif değil, kullanım dışı düğüm-waf kullanıyor) ve kurulum benim için başarısız oldu.
Yogu

18
"C ++ ile üretilmiştir, bu nedenle performans garanti edilir" - sadece C ++ kullanarak performans garantisi yoktur, yine de doğru şekilde programlanması gerekir.
developerbmw

Düğüm-db yalnızca desteklenmez, bağlantı dead-ish'dir - şu anda bir tür reklam sitesine yönlendirilir. Downvoting.
nurdglaw

2
@Mariano, Link Down
Pacerier

0

mysql veritabanını bir kütüphane kurarak bağlayın. burada, kararlı ve kullanımı kolay düğüm-mysql modülünü aldı.

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 için bağlantı ve sorgulama örneği


2
Bildiğim kadarıyla alfa salımları asla 'kararlı' olarak endişelenmemelidir. Yanlışsam düzelt. Alpha, üretim (ve hatta geliştirme) kodunda son derece istenmeyen olan finale gitmeden önce API'sını önemli ölçüde değiştirme olanağına sahiptir. Yani, sürüm numaralandırma semver.org yönergelerine uygunsa.
Robin van Baalen

1
"akıllı" tırnak ('') js dosyalarında o kadar akıllı olmadığı ortaya çıkıyor.
glif

Veritabanı adını nereye koyacağınızı gösterdiğinden bu yorumu beğendim
Boris Ivanov

0

Sen vb ORM, inşaatçılar, atlayıp kullanarak DB / SQL yönetimini kolaylaştırabilirsiniz sqlerve 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');
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.