MySQL avec Node.js

376

Je viens de commencer à entrer dans Node.js. Je viens d'un arrière-plan PHP, donc je suis assez habitué à utiliser MySQL pour tous mes besoins de base de données.

Comment puis-je utiliser MySQL avec Node.js?

crawf
la source
5
qu'avez-vous fini avec? il y a quelques bonnes informations ci-dessous, je serais intéressé à connaître vos expériences
Landon
7
@Landon, en fait, est allé avec node-mysql pour plusieurs raisons, principalement parce qu'il est en développement assez actif, et semble être le plus largement utilisé. J'aime aussi beaucoup la multipleStatementsfonction.
crawf
@crawf Que préférez-vous, PHP ou Node.js? J'ai sauté dans PHP / MySQL, mais je pense à passer au nœud car cela me semblerait beaucoup plus naturel étant donné que la syntaxe est la syntaxe JS
oldboy
1
@Anthony Préférence personnelle Je suppose que cela dépend de l'écosystème dans lequel vous vous développez, si vous êtes dans une équipe, etc. et le travail de back-end. Je dirais que si vous avez le temps d'essayer Node, et son excellent jumelé avec des choses comme socket.io pour les sockets Web en temps réel.
crawf

Réponses:

427

Consultez la liste des modules node.js

node-mysql semble assez simple:

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

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

Requêtes:

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
la source
81
+1 pour node-mysql, ce qui facilite l' utilisation des instructions préparées plutôt que de ne pas les utiliser
Kevin Laity
2
github.com/bminer/node-mysql-queues pour les transactions et la prise en charge de plusieurs instructions à utiliser avec node-mysql.
BMiner
2
+1 pour node-mysql également. Quoi de mieux que de simplement requireing d'une bibliothèque javascript
Alex K
4
@KevinLaity J'avais l'impression que node-mysql n'a pas encore mis en œuvre d'instructions préparées. La syntaxe est similaire . Au lieu de cela, il semble que, pour l'instant, les caractères spéciaux soient échappés.
funseiki
4
De plus, vous pouvez obtenir le nom de votre base de données en ajoutant «base de données» à l'objet de connexion
felipekm
29

node-mysql est probablement l'un des meilleurs modules utilisés pour travailler avec la base de données MySQL qui est activement maintenue et bien documentée.

yojimbo87
la source
20

Puisqu'il s'agit d'un ancien fil ajoutant simplement une mise à jour:

Pour installer le pilote MySQL node.js:

Si vous exécutez simplement npm install mysql, vous devez être dans le même répertoire que celui où vous exécutez votre serveur. Je conseillerais de le faire comme dans l'un des exemples suivants:

Pour une installation globale:

npm install -g mysql

Pour une installation locale:

1- Ajoutez-le à votre package.jsondans les dépendances:

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

2- courir npm install


Notez que pour que les connexions se produisent, vous devrez également exécuter le serveur mysql (qui est indépendant du nœud)

Pour installer le serveur MySQL:

Il existe un tas de tutoriels qui expliquent cela, et cela dépend un peu du système d'exploitation. Accédez simplement à Google et recherchez how to install mysql server [Ubuntu|MacOSX|Windows]. Mais en une phrase: vous devez aller sur http://www.mysql.com/downloads/ et l'installer.

fmsf
la source
3
npm install --save mysqlva l'installer l'ajouter package.jsonautomatiquement à votre
Xeoncross
11

Voici le code de production qui peut vous aider.

Package.json

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

Voici le fichier serveur.

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

Référence: https://codeforgeek.com/2015/01/nodejs-mysql-tutorial/

Shaikh Shahid
la source
Ce code semble Cannot read property 'release' of undefined
foiré
4

Imo, vous devriez essayer MySQL Connector / Node.js qui est le pilote Node.js officiel pour MySQL. Voir ref-1 et ref-2 pour une explication détaillée. J'ai essayé mysqljs / mysql qui est disponible ici , mais je ne trouve pas de documentation détaillée sur les classes, les méthodes et les propriétés de cette bibliothèque.

J'ai donc opté pour la norme MySQL Connector/Node.jsavec X DevAPI, car il s'agit d'une bibliothèque client asynchrone basée sur Promise et qui fournit une bonne documentation. Jetez un œil à l'extrait de code suivant:

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
la source
3

KnexJs peut être utilisé comme générateur de requêtes SQL à la fois dans Node.JS et dans le navigateur. Je le trouve facile à utiliser. Laissez-le essayer - 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'
  }
});

Vous pouvez l'utiliser comme ceci

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

ou

knex('users').where({
  first_name: 'Test',
  last_name:  'User'
}).select('id')
Quy Tang
la source
1

Vous pouvez également essayer un nouvel effort connu sous le nom de Node.js DB qui vise à fournir un cadre commun pour plusieurs moteurs de base de données. Il est construit avec C ++ donc les performances sont garanties.

Plus précisément, vous pouvez utiliser son pilote db-mysql pour la prise en charge de Node.js MySQL .

Mariano Iglesias
la source
1
Merci! Je vais essayer aussi.
crawf
4
node-db n'est plus pris en charge (inactif pendant 8 mois, utilise node-waf obsolète) et l'installation a échoué pour moi.
Yogu
18
"Il est construit avec C ++ donc les performances sont garanties" - le simple fait d'utiliser C ++ ne garantit pas les performances, il doit encore être programmé correctement.
developerbmw
Non seulement le noeud-db n'est pas pris en charge, le lien est mort-redirigé - redirigé vers une sorte de site publicitaire tout à l'heure. Downvoting.
nurdglaw
2
@Mariano, Link Down
Pacerier
0

connectez la base de données mysql en installant une bibliothèque. ici, choisi le module node-mysql stable et facile à utiliser.

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

Exemple de connexion et d'interrogation pour NodeJS mysql

Prabin Tp
la source
2
Pour autant que je sache, les versions alpha ne doivent jamais être considérées comme «stables». Corrige moi si je me trompe. Alpha a la possibilité de modifier radicalement son API avant de passer à la version finale, ce qui est très indésirable dans le code de production (et même de développement). Autrement dit, si la numérotation des versions suit les directives semver.org .
Robin van Baalen
1
les guillemets "intelligents" ('') ne sont pas aussi intelligents dans les fichiers js.
glyphe
J'aime ce commentaire car il montre où mettre le nom de la base de données
Boris Ivanov
0

Vous pouvez ignorer l'ORM, les générateurs, etc. et simplifier votre gestion DB / SQL à l'aide de sqleret 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');
});
ugate
la source