MySQL mit Node.js.

375

Ich habe gerade angefangen, in Node.js einzusteigen. Ich komme aus einem PHP-Hintergrund, daher bin ich es ziemlich gewohnt, MySQL für alle meine Datenbankanforderungen zu verwenden.

Wie kann ich MySQL mit Node.js verwenden?

crawf
quelle
5
Was hast du am Ende gemacht? Es gibt einige gute Informationen unten, ich würde gerne hören, was Ihre Erfahrungen waren
Landon
7
@Landon hat sich aus einigen Gründen für Node-MySQL entschieden, hauptsächlich weil es sich in einer ziemlich aktiven Entwicklung befindet und am weitesten verbreitet zu sein scheint. Die multipleStatementsFunktion gefällt mir auch sehr gut .
crawf
@crawf Was bevorzugst du, PHP oder Node.js? Ich bin in PHP / MySQL gesprungen, denke aber darüber nach, zum Knoten zu wechseln, da es sich viel natürlicher anfühlt, wenn man bedenkt, dass die Syntax JS-Syntax ist
oldboy
1
@Anthony Persönliche Vorlieben Ich nehme an, es hängt von dem Ökosystem ab, in dem Sie sich entwickeln, ob Sie in einem Team sind usw. Dieser ursprüngliche Beitrag ist uralt und hat sich in der Knotenlandschaft, in der er für die Front weitaus üblicher ist, stark verändert und Backend-Arbeit. Ich würde sagen, wenn Sie Zeit haben, Node auszuprobieren, und es ist großartig, gepaart mit Dingen wie socket.io für Echtzeit-Web-Sockets.
crawf

Antworten:

426

Überprüfen Sie die Modulliste node.js.

node-mysql sieht einfach aus:

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

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

Fragen:

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
quelle
81
+1 für Node-MySQL, was es tatsächlich einfacher macht , vorbereitete Anweisungen zu verwenden, als sie nicht zu verwenden
Kevin Laity
2
github.com/bminer/node-mysql-queues für Transaktionen und Unterstützung für mehrere Anweisungen zur Verwendung mit Node-MySQL.
BMiner
2
+1 auch für Node-MySQL. Was gibt es Schöneres, als nur requireeine Javascript-Bibliothek zu erstellen
Alex K
4
@ KevinLaity Ich hatte den Eindruck, dass Node-MySQL noch keine vorbereiteten Anweisungen implementiert hat. Die Syntax sieht einfach ähnlich aus . Stattdessen scheinen vorerst Sonderzeichen maskiert zu sein.
funseiki
4
Außerdem können Sie Ihren Datenbanknamen erhalten, indem Sie 'Datenbank' zum Verbindungsobjekt hinzufügen
felipekm
28

node-mysql ist wahrscheinlich eines der besten Module für die Arbeit mit MySQL-Datenbanken, die aktiv gepflegt und gut dokumentiert sind.

yojimbo87
quelle
19

Da dies ein alter Thread ist, der nur ein Update hinzufügt:

So installieren Sie den MySQL node.js-Treiber:

Wenn Sie nur ausführen npm install mysql, müssen Sie sich in demselben Verzeichnis befinden, in dem Sie Ihren Server ausführen. Ich würde empfehlen, dies wie in einem der folgenden Beispiele zu tun:

Für die globale Installation:

npm install -g mysql

Für die lokale Installation:

1- Fügen Sie es Ihren package.jsonAbhängigkeiten hinzu:

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

2- laufen npm install


Beachten Sie, dass Sie für Verbindungen auch den MySQL-Server ausführen müssen (der knotenunabhängig ist).

So installieren Sie den MySQL-Server:

Es gibt eine Reihe von Tutorials, die dies erklären, und es ist ein bisschen abhängig vom Betriebssystem. Gehen Sie einfach zu Google und suchen Sie nach how to install mysql server [Ubuntu|MacOSX|Windows]. Aber in einem Satz: Sie müssen zu http://www.mysql.com/downloads/ gehen und es installieren.

fmsf
quelle
2
npm install --save mysqlwird es installieren und package.jsonautomatisch hinzufügen
Xeoncross
10

Hier ist der Produktionscode, der Ihnen helfen kann.

Package.json

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

Hier ist die Serverdatei.

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

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

Shaikh Shahid
quelle
Dieser Code scheint vermasselt .. viele Fehler einschließlichCannot read property 'release' of undefined
Pacerier
3

KnexJs können sowohl in Node.JS als auch im Browser als SQL-Abfrage-Builder verwendet werden. Ich finde es einfach zu bedienen. Lass es versuchen - 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'
  }
});

Sie können es so verwenden

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

oder

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

Imo sollten Sie MySQL Connector / Node.js ausprobieren, den offiziellen Node.js-Treiber für MySQL. Siehe Ref-1 und Ref-2 für eine detaillierte Erklärung. Ich habe mysqljs / mysql ausprobiert, das hier verfügbar ist , aber ich finde keine detaillierte Dokumentation zu Klassen, Methoden und Eigenschaften dieser Bibliothek.

Also wechselte ich zu dem Standard MySQL Connector/Node.jsmit X DevAPI, da es ein ist asynchron Versprechen-basierte Client - Bibliothek und bietet eine gute Dokumentation. Schauen Sie sich das folgende Code-Snippet an:

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
quelle
1

Sie können auch eine neuere Version ausprobieren, die als Node.js DB bekannt ist und ein gemeinsames Framework für mehrere Datenbankmodule bereitstellen soll. Es wurde mit C ++ erstellt, sodass die Leistung garantiert ist.

Insbesondere können Sie den db-mysql-Treiber für die MySQL-Unterstützung von Node.j verwenden .

Mariano Iglesias
quelle
1
Vielen Dank! Ich werde es auch versuchen.
crawf
4
node-db wird nicht mehr unterstützt (8 Monate inaktiv, verwendet veraltetes node-waf) und die Installation ist für mich fehlgeschlagen.
Yogu
18
"Es wurde mit C ++ erstellt, damit die Leistung garantiert ist" - die einfache Verwendung von C ++ garantiert keine Leistung, muss jedoch noch korrekt programmiert werden.
Developerbmw
Node-DB wird nicht nur nicht unterstützt, der Link ist auch tot - er wird gerade auf eine Art Anzeigenwebsite umgeleitet. Downvoting.
Nurdglaw
2
@Mariano, Link Down
Pacerier
0

Verbinden Sie die MySQL-Datenbank, indem Sie eine Bibliothek installieren. Hier wurde das stabile und einfach zu bedienende Node-MySQL-Modul ausgewählt.

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

Für NodeJS mysql Verbindungs- und Abfragebeispiel

Prabin Tp
quelle
2
Soweit ich weiß, sind Alpha-Releases niemals als "stabil" zu betrachten. Korrigiere mich, wenn ich falsch liege. Alpha hat die Möglichkeit, seine API dramatisch zu ändern, bevor es zum endgültigen Ergebnis kommt, was im Produktionscode (und sogar im Entwicklungscode) höchst unerwünscht ist. Das heißt, wenn die Versionsnummerierung den semver.org- Richtlinien entspricht.
Robin van Baalen
1
"intelligente" Anführungszeichen ('') erweisen sich in js-Dateien als nicht so intelligent.
Glyphe
Ich mag diesen Kommentar, weil er zeigt, wo der Datenbankname abgelegt werden soll
Boris Ivanov
0

Sie können ORM, Builder usw. überspringen und Ihre DB / SQL-Verwaltung mit sqlerund vereinfachen 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');
});
hässlich
quelle