MySQL con Node.js


376

Ho appena iniziato a entrare in Node.js. Vengo da un background PHP, quindi sono abbastanza abituato a usare MySQL per tutte le esigenze del mio database.

Come posso usare MySQL con Node.js?


5
con cosa sei finito? ci sono alcune buone informazioni qui sotto, sarei interessato a sapere quali sono state le tue esperienze
Landon,

7
@Landon, in realtà è andato con node-mysql per alcuni motivi, principalmente perché è in uno sviluppo abbastanza attivo e sembra essere il più usato. Mi piace molto anche la multipleStatementsfunzione.
scansione del

@crawf Cosa preferisci, PHP o Node.js? Sono entrato in PHP / MySQL, ma sto pensando di passare al nodo poiché sarebbe molto più naturale considerando che la sintassi è la sintassi JS
oldboy

1
@Anthony Preferenza personale, suppongo, dipende dall'ecosistema in cui ti stai sviluppando, se fai parte di una squadra, ecc. Questo post originale è antico e molto è cambiato nel panorama dei Nodi dove è molto più comune per il fronte e lavoro di back-end. Direi che se hai tempo di provare Node, e si abbina perfettamente a cose come socket.io per i socket web in tempo reale.
striscia il

Risposte:


427

Controlla la lista dei moduli node.js

node-mysql sembra abbastanza semplice:

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

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

Interrogazioni:

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 per node-mysql che in realtà rende più semplice usare le istruzioni preparate piuttosto che non usarle
Kevin Laity,

2
github.com/bminer/node-mysql-queues per le transazioni e supporto per istruzioni multiple da utilizzare con node-mysql.
BMiner,

2
+1 anche per node-mysql. Cosa c'è di meglio di una semplice requirelibreria javascript
Alex K,

4
@KevinLaity Avevo l'impressione che node-mysql non abbia ancora implementato le istruzioni. La sintassi sembra simile . Invece, sembra che, per ora, i caratteri speciali siano sfuggiti.
funseiki,

4
Inoltre puoi ottenere il nome del tuo database aggiungendo 'database' all'oggetto di connessione
felipekm

29

node-mysql è probabilmente uno dei migliori moduli là fuori usati per lavorare con il database MySQL che è attivamente mantenuto e ben documentato.


20

Dato che questo è un vecchio thread che aggiunge solo un aggiornamento:

Per installare il driver MySQL node.js:

Se si esegue solo npm install mysql, è necessario trovarsi nella stessa directory in cui si esegue il server. Consiglierei di farlo come in uno dei seguenti esempi:

Per l'installazione globale:

npm install -g mysql

Per l'installazione locale:

1- Aggiungilo al tuo package.jsonnelle dipendenze:

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

2- correre npm install


Nota che affinché avvengano le connessioni dovrai anche eseguire il server mysql (che è indipendente dal nodo)

Per installare il server MySQL:

Ci sono un sacco di tutorial là fuori che spiegano questo, ed è un po 'dipendente dal sistema operativo. Vai su google e cerca how to install mysql server [Ubuntu|MacOSX|Windows]. Ma in una frase: devi andare su http://www.mysql.com/downloads/ e installarlo.


3
npm install --save mysqllo installerà aggiungendolo package.jsonautomaticamente al tuo
Xeoncross

11

Ecco il codice di produzione che può aiutarti.

Package.json

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

Ecco il file del 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);

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


Questo codice sembra Cannot read property 'release' of undefined
rovinato

4

Imo, dovresti provare MySQL Connector / Node.js che è il driver Node.js ufficiale per MySQL. Vedere ref-1 e ref-2 per una spiegazione dettagliata. Ho provato mysqljs / mysql che è disponibile qui , ma non trovo documentazione dettagliata su classi, metodi, proprietà di questa libreria.

Quindi sono passato allo standard MySQL Connector/Node.jscon X DevAPI, poiché è una libreria client asincrona basata su Promise e offre una buona documentazione. Dai un'occhiata al seguente frammento di codice:

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 può essere usato come un generatore di query SQL sia in Node.JS che nel browser. Lo trovo facile da usare. Provalo - 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'
  }
});

Puoi usarlo in questo modo

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

o

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

1

È inoltre possibile provare uno sforzo più recente noto come DB Node.js che mira a fornire un framework comune per diversi motori di database. È costruito con C ++ quindi le prestazioni sono garantite.

In particolare si potrebbe usare il suo driver db-mysql per il supporto Node.js MySQL .


1
Grazie! Ci proverò anche io.
scansione del

4
node-db non è più supportato (inattivo per 8 mesi, utilizza node-waf obsoleto) e l'installazione non è riuscita per me.
Yogu,

18
"È costruito con C ++, quindi le prestazioni sono garantite" - semplicemente l'uso di C ++ non garantisce le prestazioni, deve comunque essere programmato correttamente.
Developerbmw

Non solo il nodo-db non è supportato, il link è dead-ish - reindirizzato a qualche tipo di sito di annunci proprio ora. Downvoting.
nurdglaw,

2
@Mariano, Link Down
Pacerier,

0

collegare il database mysql installando una libreria. qui, ho scelto il modulo node-mysql stabile e facile da usare.

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

Per l'esempio di connessione e query di NodeJS mysql


2
Per quanto ne so, le versioni alfa non devono mai essere considerate "stabili". Correggimi se sbaglio. Alpha ha la possibilità di cambiare radicalmente la sua API prima di passare a final che è altamente indesiderato nel codice di produzione (e persino di sviluppo). Cioè, se la numerazione delle versioni segue le linee guida di semver.org .
Robin van Baalen,

1
Le virgolette "intelligenti" ('') risultano non essere così intelligenti nei file js.
glifo

Mi piace questo commento perché mostra dove inserire il nome del database
Boris Ivanov,

0

È possibile saltare ORM, builder, ecc. E semplificare la gestione di DB / SQL utilizzando sqlere 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');
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.