MySQL z Node.js

375

Właśnie zacząłem dostawać się do Node.js. Pochodzę z środowiska PHP, więc jestem przyzwyczajony do używania MySQL do wszystkich potrzeb związanych z bazą danych.

Jak mogę używać MySQL z Node.js?

czołgać się
źródło
5
z czym skończyłeś? poniżej jest kilka dobrych informacji, chciałbym usłyszeć, jakie były twoje doświadczenia
Landon
7
@Landon, tak naprawdę poszedł z node-mysql z kilku powodów, głównie dlatego, że jest w dość aktywnym rozwoju i wydaje się być najczęściej używany. Bardzo podoba mi się również ta multipleStatementsfunkcja.
crawf
@crawf Co wolisz, PHP lub Node.js? Wskoczyłem do PHP / MySQL, ale myślę o przejściu na węzeł, ponieważ byłoby to znacznie bardziej naturalne, biorąc pod uwagę składnię JS
oldboy
1
@Anthony Osobiste preferencje Przypuszczam, że zależy to od ekosystemu, w którym się rozwijasz, jeśli jesteś w zespole itp. Ten oryginalny post jest starożytny i wiele się zmieniło w krajobrazie Węzłów, gdzie jest znacznie bardziej powszechny i praca zaplecza. Powiedziałbym, że jeśli masz czas, aby wypróbować Node, a jest on świetny w połączeniu z takimi rzeczami, jak socket.io dla gniazd internetowych w czasie rzeczywistym.
crawf

Odpowiedzi:

426

Sprawdź listę modułów node.js

  • node-mysql - moduł node.js implementujący protokół MySQL
  • node-mysql2 - Kolejny czysty sterownik asynchroniczny JS. Rurociągi, przygotowane oświadczenia.
  • node-mysql-libmysqlclient - Asynchroniczne wiązania MySQL oparte na libmysqlclient

node-mysql wygląda dość prosto:

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

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

Zapytania:

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'
mak
źródło
81
+1 dla węzła-mysql faktycznie ułatwia korzystanie z przygotowanych instrukcji niż ich nie używanie
Kevin Laity
2
github.com/bminer/node-mysql-queues dla transakcji i obsługa wielu instrukcji do użytku z node-mysql.
BMiner
2
+1 również dla węzła-mysql. Co może być lepszego niż po prostu requirebiblioteka javascript
Alex K
4
@KevinLaity Miałem wrażenie, że node-mysql nie przygotował jeszcze zaimplementowanych instrukcji. Składnia wygląda podobnie . Zamiast tego wydaje się, że na razie uciekają znaki specjalne.
funseiki,
4
Dodatkowo możesz uzyskać nazwę swojej bazy danych, dodając „bazę danych” do obiektu połączenia
felipekm
28

node-mysql jest prawdopodobnie jednym z najlepszych dostępnych modułów do pracy z bazą danych MySQL, która jest aktywnie utrzymywana i dobrze udokumentowana.

yojimbo87
źródło
19

Ponieważ jest to stary wątek, po prostu dodaje aktualizację:

Aby zainstalować sterownik MySQL node.js:

Jeśli uruchamiasz tylko npm install mysql, musisz znajdować się w tym samym katalogu, w którym działa serwer. Radziłbym to zrobić jak w jednym z następujących przykładów:

W przypadku instalacji globalnej:

npm install -g mysql

Do instalacji lokalnej:

1- Dodaj go do swoich package.jsonzależności:

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

2-biegowy npm install


Pamiętaj, że aby nawiązać połączenia, musisz także uruchomić serwer mysql (niezależny od węzłów)

Aby zainstalować serwer MySQL:

Istnieje wiele samouczków, które to wyjaśniają, i jest to trochę zależne od systemu operacyjnego. Po prostu przejdź do Google i wyszukaj how to install mysql server [Ubuntu|MacOSX|Windows]. Ale w jednym zdaniu: musisz przejść do strony http://www.mysql.com/downloads/ i zainstalować ją.

fmsf
źródło
2
npm install --save mysqlzainstaluje go, doda go package.jsonautomatycznie
Xeoncross,
10

Oto kod produkcyjny, który może ci pomóc.

Package.json

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

Oto plik serwera.

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

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

Shaikh Shahid
źródło
Ten kod wydaje się Cannot read property 'release' of undefined
spieprzony
3

KnexJs może być używany jako narzędzie do tworzenia zapytań SQL w Node.JS i przeglądarce. Uważam, że jest łatwy w użyciu. Spróbujmy - 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'
  }
});

Możesz użyć tego w ten sposób

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

lub

knex('users').where({
  first_name: 'Test',
  last_name:  'User'
}).select('id')
Quy Tang
źródło
3

Imo, powinieneś wypróbować MySQL Connector / Node.js, który jest oficjalnym sterownikiem Node.js dla MySQL. Zobacz ref-1 i Ref-2 do szczegółowego wyjaśnienia. Próbowałem mysqljs / mysql, który jest dostępny tutaj , ale nie znalazłem szczegółowej dokumentacji na temat klas, metod i właściwości tej biblioteki.

Więc przełączyłem się na standard MySQL Connector/Node.jsz X DevAPI, ponieważ jest to asynchroniczna biblioteka klienta oparta na obietnicy i zapewnia dobrą dokumentację. Spójrz na następujący fragment kodu:

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);
});
Lex Soft
źródło
1

Możesz także wypróbować nowszą metodę znaną jako Node.js DB, która ma na celu zapewnienie wspólnej struktury dla wielu silników baz danych. Jest zbudowany w C ++, więc wydajność jest gwarantowana.

W szczególności można użyć jej sterownik db-mysql dla wsparcia node.js MySQL .

Mariano Iglesias
źródło
1
Dzięki! Spróbuję też.
crawf
4
node-db nie jest już obsługiwany (nieaktywny przez 8 miesięcy, używa przestarzałego waf-node) i instalacja nie powiodła się dla mnie.
Yogu
18
„Jest zbudowany z C ++, więc wydajność jest gwarantowana” - samo użycie C ++ nie gwarantuje wydajności, nadal musi być poprawnie zaprogramowane.
developerbmw
Węzeł-db nie tylko nie jest obsługiwany, ale link jest martwy - przekierowany właśnie teraz na jakąś stronę reklamową. Downvoting.
nurdglaw
2
@Mariano, Link Down
Pacerier
0

połącz bazę danych mysql, instalując bibliotekę. tutaj wybrałem stabilny i łatwy w użyciu moduł 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();

Przykład połączenia i kwerendy dla mysql NodeJS

Prabin Tp
źródło
2
O ile wiem, wydania alfa nigdy nie powinny być traktowane jako „stabilne”. Popraw mnie, jeśli się mylę. Alpha ma możliwość radykalnej zmiany API przed przejściem do finału, co jest wysoce niepożądane w kodzie produkcyjnym (a nawet programistycznym). To znaczy, jeśli numeracja wersji jest zgodna z wytycznymi semver.org .
Robin van Baalen,
1
„inteligentne” cytaty („”) okazują się nie być tak inteligentne w plikach js.
glif
Podoba mi się ten komentarz, ponieważ pokazuje, gdzie umieścić nazwę bazy danych
Borys Iwanow
0

Możesz pominąć ORM, konstruktory itp. I uprościć zarządzanie DB / SQL za pomocą sqleri 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');
});
brzydki
źródło