MySQL dengan Node.js


376

Saya baru saja mulai masuk ke Node.js. Saya berasal dari latar belakang PHP, jadi saya cukup terbiasa menggunakan MySQL untuk semua kebutuhan basis data saya.

Bagaimana saya bisa menggunakan MySQL dengan Node.js?


5
apa yang akhirnya terjadi denganmu? ada beberapa informasi yang baik di bawah ini, saya akan tertarik untuk mendengarkan apa pengalaman Anda
Landon

7
@ Landon, sebenarnya pergi dengan node-mysql karena beberapa alasan, terutama karena itu dalam pengembangan yang cukup aktif, dan tampaknya menjadi yang paling banyak digunakan. Saya juga sangat suka multipleStatementsfungsinya.
crawf

@crawf Apa yang Anda sukai, PHP atau Node.js? Saya melompat ke PHP / MySQL, tetapi saya berpikir untuk beralih ke node karena itu akan terasa jauh lebih alami mengingat sintaksnya adalah sintaks JS
oldboy

1
@Anthony Preferensi pribadi Saya kira, itu tergantung pada ekosistem yang Anda kembangkan, jika Anda berada dalam tim, dll. Posting asli ini kuno, dan banyak yang telah berubah di lanskap Node di mana jauh lebih umum untuk depan dan back end bekerja. Saya akan mengatakan jika Anda punya waktu untuk mencoba Node, dan sangat cocok dengan hal-hal seperti socket.io untuk soket web waktu nyata.
crawf

Jawaban:


427

Periksa daftar modul node.js

node-mysql terlihat cukup sederhana:

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

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

Pertanyaan:

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
+1 untuk node-mysql sebenarnya membuatnya lebih mudah untuk menggunakan pernyataan yang disiapkan daripada tidak menggunakannya
Kevin Laity

2
github.com/bminer/node-mysql-queues untuk transaksi dan dukungan multi pernyataan untuk digunakan dengan node-mysql.
BMiner

2
+1 untuk node-mysql juga. Apa yang bisa lebih baik daripada hanya requireperpustakaan javascript
Alex K

4
@KevinLaity Saya mendapat kesan bahwa node-mysql belum menyiapkan pernyataan yang diimplementasikan. Sintaksnya terlihat mirip . Sebaliknya, tampaknya, untuk saat ini, karakter khusus sedang melarikan diri.
funseiki

4
Plus Anda bisa mendapatkan nama database Anda menambahkan 'database' ke objek koneksi
felipekm

29

node-mysql mungkin salah satu modul terbaik di luar sana yang digunakan untuk bekerja dengan database MySQL yang secara aktif dipelihara dan didokumentasikan dengan baik.


20

Karena ini adalah utas lama yang hanya menambahkan pembaruan:

Untuk menginstal driver MySQL node.js:

Jika Anda menjalankan hanya npm install mysql, Anda harus berada di direktori yang sama dengan yang Anda jalankan server Anda. Saya akan menyarankan untuk melakukannya seperti dalam salah satu contoh berikut:

Untuk instalasi global:

npm install -g mysql

Untuk pemasangan lokal:

1- Tambahkan ke package.jsondalam dependensi Anda:

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

2- lari npm install


Perhatikan bahwa agar koneksi terjadi, Anda juga harus menjalankan server mysql (yang merupakan simpul independen)

Untuk menginstal server MySQL:

Ada banyak tutorial di luar sana yang menjelaskan hal ini, dan itu sedikit tergantung pada sistem operasi. Cukup buka google dan cari how to install mysql server [Ubuntu|MacOSX|Windows]. Tetapi dalam sebuah kalimat: Anda harus pergi ke http://www.mysql.com/downloads/ dan menginstalnya.


3
npm install --save mysqlakan menginstalnya dan menambahkannya ke perangkat Anda package.jsonsecara otomatis
Xeoncross

11

Berikut adalah kode produksi yang dapat membantu Anda.

Package.json

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

Ini adalah file Server.

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

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


Kode ini tampaknya kacau .. banyak kesalahan termasukCannot read property 'release' of undefined
Pacerier

4

Imo, Anda harus mencoba MySQL Connector / Node.js yang merupakan driver Node.js resmi untuk MySQL. Lihat ref-1 dan ref-2 untuk penjelasan terperinci. Saya telah mencoba mysqljs / mysql yang tersedia di sini , tetapi saya tidak menemukan dokumentasi terperinci tentang kelas, metode, properti perpustakaan ini.

Jadi saya beralih ke standar MySQL Connector/Node.jsdengan X DevAPI, karena itu adalah berbasis Janji asynchronous klien perpustakaan dan menyediakan dokumentasi yang baik. Lihatlah potongan kode berikut:

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 dapat digunakan sebagai pembangun kueri SQL di Node.JS dan browser. Saya merasa mudah digunakan. Mari kita coba - 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'
  }
});

Anda bisa menggunakannya seperti ini

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

atau

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

1

Anda juga dapat mencoba upaya yang lebih baru yang dikenal sebagai Node.js DB yang bertujuan untuk menyediakan kerangka kerja umum untuk beberapa mesin basis data. Itu dibangun dengan C ++ sehingga kinerja dijamin.

Khususnya Anda bisa menggunakan driver db-mysql untuk dukungan Node.js MySQL .


1
Terima kasih! Saya akan mencobanya juga.
crawf

4
node-db tidak lagi didukung (tidak aktif selama 8 bulan, menggunakan node-waf yang sudah tidak digunakan) dan instalasi gagal untuk saya.
Yogu

18
"Ini dibangun dengan C ++ sehingga kinerja dijamin" - hanya menggunakan C ++ tidak menjamin kinerja, itu masih harus diprogram dengan benar.
developerbmw

Tidak hanya simpul-db tidak didukung, tautannya mati-ish - dialihkan ke beberapa jenis situs iklan sekarang. Downvoting.
nurdglaw

2
@Mariano, Tautan Turun
Pacerier

0

sambungkan database mysql dengan menginstal perpustakaan. di sini, pilih modul node-mysql yang stabil dan mudah digunakan.

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

Untuk NodeJS mysql menghubungkan dan meminta contoh


2
Sejauh yang saya tahu rilis alpha tidak pernah perlu khawatir sebagai 'stabil'. Koreksi saya jika saya salah. Alpha memiliki kemungkinan untuk secara dramatis mengubah API sebelum pergi ke final yang sangat tidak diinginkan dalam kode produksi (dan bahkan pengembangan). Yaitu, jika penomoran versi mengikuti pedoman semver.org .
Robin van Baalen

1
Kutipan "pintar" ('') ternyata tidak terlalu pintar dalam file js.
mesin terbang

Saya suka komentar ini karena ini menunjukkan di mana harus meletakkan nama basis data
Boris Ivanov

0

Anda dapat melewati ORM, pembangun, dll. Dan menyederhanakan manajemen DB / SQL Anda menggunakan sqlerdan 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');
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.