web-dev-qa-db-fra.com

Connectez-vous à la base de données SQL Server à partir de Node.js

La question reprend certaines questions plus anciennes, mais les choses ont peut-être changé depuis.

Existe-t-il un support officiel pour la connexion à SQL Server à partir de Node.js (par exemple, une bibliothèque officielle à partir de MS)? Ou au moins une bibliothèque tierce bien entretenue appropriée pour une application de production?

Nous utilisons habituellement la combinaison ASP.NET MVC/SQL Server, mais actuellement, j’ai une tâche pour laquelle express/Node.js semble être plus appropriée (et j'aimerais jouer avec quelque chose de nouveau). compter sur une interaction Node.js et SQL Server.

UPD: Il semble que Microsoft ait enfin publié le pilote officiel: https://github.com/WindowsAzure/node-sqlserver

24
penartur

Je ne suis pas sûr d’avoir vu cette liste de Modules MS SQL pour Node JS

Partagez votre expérience après en avoir utilisé si possible.

Bonne chance

13
Futur

Ceci est principalement pour les futurs lecteurs. Comme la question (au moins le titre) porte sur "la connexion à la base de données du serveur SQL à partir du nœud js", je souhaiterais apporter des précisions sur le module de nœud "mssql".

Nous disposons actuellement d'une version stable du pilote Microsoft SQL Server pour NodeJs ("msnodesql"): https://www.npmjs.com/package/msnodesql . Même si l'intégration native à la base de données Microsoft SQL Server est excellente (par rapport à tout autre module de nœud), il convient de noter quelques points.

"msnodesql" nécessite l'installation de quelques prérequis (tels que python, VC++, client natif SQL, etc.) sur la machine hôte. Cela rend votre application "noeud" "Windows" dépendante. Si le déploiement "Windows" vous convient, travailler avec "msnodesql" est la meilleure solution.

D'autre part, il existe un autre module appelé "mssql" (disponible ici https://www.npmjs.com/package/mssql ) qui peut fonctionner avec "fastidieux" ou "msnodesql" en fonction de la configuration. Bien que ce module ne soit pas aussi complet que "msnodesql", il résout assez bien la plupart des besoins. 

Si vous souhaitez commencer par "mssql", je suis tombé sur une vidéo simple et directe, qui explique comment se connecter à la base de données Microsoft SQL Server à l'aide de NodeJs ici: https://www.youtube.com/watch?v= MLcXfRH1YzE

Le code source de la vidéo ci-dessus est disponible ici: http://techcbt.com/Post/341/Node-js-basic-programming-tutorials-videos/how-to-connect-to-Microsoft-sql-server- using-node-js

Juste au cas où, si les liens ci-dessus ne fonctionnent pas, j'inclus le code source ici:

var sql = require("mssql");

var dbConfig = {
    server: "localhost\\SQL2K14",
    database: "SampleDb",
    user: "sa",
    password: "sql2014",
    port: 1433
};

function getEmp() {
    var conn = new sql.Connection(dbConfig);
    
    conn.connect().then(function () {
        var req = new sql.Request(conn);
        req.query("SELECT * FROM emp").then(function (recordset) {
            console.log(recordset);
            conn.close();
        })
        .catch(function (err) {
            console.log(err);
            conn.close();
        });        
    })
    .catch(function (err) {
        console.log(err);
    });

    //--> another way
    //var req = new sql.Request(conn);
    //conn.connect(function (err) {
    //    if (err) {
    //        console.log(err);
    //        return;
    //    }
    //    req.query("SELECT * FROM emp", function (err, recordset) {
    //        if (err) {
    //            console.log(err);
    //        }
    //        else { 
    //            console.log(recordset);
    //        }
    //        conn.close();
    //    });
    //});

}

getEmp();

Le code ci-dessus est assez explicite. Nous définissons les paramètres de connexion à la base de données (dans l'objet JS "dbConfig"), puis nous utilisons l'objet "Connexion" pour établir la connexion à SQL Server. Pour exécuter une instruction "SELECT", dans ce cas, il utilise l'objet "Request" qui fonctionne en interne avec l'objet "Connection". Le code explique les deux types d'utilisation des exécutions basées sur "promesse" et "rappel".

Le code source ci-dessus explique uniquement comment se connecter à la base de données du serveur SQL et exécuter une requête SELECT. Vous pouvez facilement passer au niveau supérieur en suivant la documentation du noeud "mssql" disponible à l’adresse: https://www.npmjs.com/package/mssql

UPDATE: Une nouvelle vidéo présente les opérations CRUD utilisant le standard pur Node.js REST (avec Microsoft SQL Server) ici: https://www.youtube.com/watch ? v = xT2AvjQ7q9E . C’est une vidéo fantastique qui explique tout à partir de zéro (elle contient énormément de code et il ne sera pas très agréable d’expliquer/copier tout le code ici)

25
user203687

Nous venons de publier un pilote de prévisualisation pour Node.JS pour la connectivité SQL Server. Vous pouvez le trouver ici: Présentation du pilote Microsoft pour Node.JS pour SQL Server .

Le pilote prend en charge les rappels (nous nous connectons ici à une instance locale de SQL Server):

// Query with explicit connection
var sql = require('node-sqlserver');
var conn_str = "Driver={SQL Server Native Client 11.0};Server=(local);Database=AdventureWorks2012;Trusted_Connection={Yes}";

sql.open(conn_str, function (err, conn) {
    if (err) {
        console.log("Error opening the connection!");
        return;
    }
    conn.queryRaw("SELECT TOP 10 FirstName, LastName FROM Person.Person", function (err, results) {
        if (err) {
            console.log("Error running query!");
            return;
        }
        for (var i = 0; i < results.rows.length; i++) {
            console.log("FirstName: " + results.rows[i][0] + " LastName: " + results.rows[i][1]);
        }
    });
});

Vous pouvez également utiliser des événements (ici, nous nous connectons à la base de données SQL Azure a.k.a de SQL Azure):

// Query with streaming
var sql = require('node-sqlserver');
var conn_str = "Driver={SQL Server Native Client 11.0};Server={tcp:servername.database.windows.net,1433};UID={username};PWD={Password1};Encrypt={Yes};Database={databasename}";

var stmt = sql.query(conn_str, "SELECT FirstName, LastName FROM Person.Person ORDER BY LastName OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY");
stmt.on('meta', function (meta) { console.log("We've received the metadata"); });
stmt.on('row', function (idx) { console.log("We've started receiving a row"); });
stmt.on('column', function (idx, data, more) { console.log(idx + ":" + data);});
stmt.on('done', function () { console.log("All done!"); });
stmt.on('error', function (err) { console.log("We had an error :-( " + err); });

Si vous rencontrez des problèmes, veuillez signaler un problème sur Github: https://github.com/windowsazure/node-sqlserver/issues

6
kop48

Il existe un module sur npm appelé mssqlhelper

Vous pouvez l'installer dans votre projet avec npm i mssqlhelper

Exemple de connexion et d'exécution d'une requête:

var db = require('./index');

db.config({
    Host: '192.168.1.100'
    ,port: 1433
    ,userName: 'sa'
    ,password: '123'
    ,database:'testdb'
});

db.query(
    'select @Param1 Param1,@Param2 Param2'
    ,{
         Param1: { type : 'NVarChar', size: 7,value : 'myvalue' }
         ,Param2: { type : 'Int',value : 321 }
    }
    ,function(res){
        if(res.err)throw new Error('database error:'+res.err.msg);
        var rows = res.tables[0].rows;
        for (var i = 0; i < rows.length; i++) {
            console.log(rows[i].getValue(0),rows[i].getValue('Param2'));
        }
    }
);

Vous pouvez en savoir plus à ce sujet ici: https://github.com/play175/mssqlhelper

: o)

2
Menztrual

msnodesql fonctionne très bien pour moi. Voici un échantillon:

var mssql = require('msnodesql'), 
    express = require('express'),
    app = express(),
    nconf = require('nconf')

nconf.env()
     .file({ file: 'config.json' });

var conn = nconf.get("SQL_CONN");   
var conn_str = "Driver={SQL Server Native Client 11.0};Server=server.name.here;Database=Product;Trusted_Connection={Yes}";

app.get('/api/brands', function(req, res){
    var data = [];
    var jsonObject = {};    

    mssql.open(conn_str, function (err, conn) {
        if (err) {
            console.log("Error opening the connection!");
            return;
        }
        conn.queryRaw("dbo.storedproc", function (err, results) {
        if(err) {
                   console.log(err);
                   res.send(500, "Cannot retrieve records.");
                }
       else {
             //res.json(results);

             for (var i = 0; i < results.rows.length; i++) {
                 var jsonObject = new Object()
                 for (var j = 0; j < results.meta.length; j++) { 

                    paramName = results.meta[j].name;
                    paramValue = results.rows[i][j]; 
                    jsonObject[paramName] = paramValue;

                    }
                    data.Push(jsonObject);  //This is a js object we are jsonizing not real json until res.send             
            } 

                res.send(data);

            }       
        });
    });
});
0
Buju