Подтвердить что ты не робот

Подключиться к базе данных SQL Server из Node.js

Вопрос дублирует некоторые более старые вопросы, но с тех пор ситуация может измениться.

Есть ли официальная поддержка для подключения к SQL Server от Node.js(например, официальная библиотека от MS)? Или, по крайней мере, некоторая поддерживаемая сторонняя библиотека, подходящая для производственного приложения?

Обычно мы используем комбинацию ASP.NET MVC/SQL Server, но в настоящее время у меня есть задача, для которой express/ Node.js представляется более подходящим (и я хотел бы играть с чем-то новым), поэтому вопрос в том, можем ли мы полагаться на взаимодействие Node.js и SQL Server.

UPD: Кажется, Microsoft наконец выпустила официальный драйвер: https://github.com/WindowsAzure/node-sqlserver

4b9b3361

Ответ 1

Я не уверен, что вы видите этот список MS SQL-модулей для Node JS

Поделитесь своим опытом после использования, если это возможно.

Удача

Ответ 2

Это в основном для будущих читателей. Поскольку вопрос (по крайней мере, название) фокусируется на "подключении к базе данных sql-сервера из node js", я хотел бы включить в модуль "mssql" node.

В настоящий момент мы имеем стабильную версию драйвера Microsoft SQL Server для NodeJs ( "msnodesql" ), доступную здесь: https://www.npmjs.com/package/msnodesql. Хотя он отлично справляется с собственной интеграцией с базой данных Microsoft SQL Server (чем любой другой модуль node), есть несколько вещей, о которых нужно помнить.

"msnodesql" требуется несколько предварительных условий (например, python, VС++, родной клиент SQL и т.д.), которые будут установлены на главной машине. Это делает ваше приложение "node" "Windows" зависимым. Если у вас все в порядке с развертыванием на базе Windows, лучше всего работать с msnodesql.

С другой стороны, существует еще один модуль под названием "mssql" (доступно здесь https://www.npmjs.com/package/mssql), который может работать с "утомительным" или "msnodesql" на основе конфигурации. Хотя этот модуль может быть не таким всеобъемлющим, как "msnodesql" , он в значительной степени решает большинство потребностей.

Если вы хотите начать с "mssql", я наткнулся на простое и прямое видео, в котором объясняется подключение к базе данных Microsoft SQL Server с помощью NodeJs: https://www.youtube.com/watch?v=MLcXfRH1YzE

Исходный код для вышеупомянутого видео можно найти здесь: http://techcbt.com/Post/341/Node-js-basic-programming-tutorials-videos/how-to-connect-to-microsoft-sql-server-using-node-js

На всякий случай, если приведенные выше ссылки не работают, я включаю здесь исходный код:

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

Ответ 3

Мы только что выпустили драйвер предварительного просмотра для Node.JS для подключения к SQL Server. Вы можете найти это здесь: Представляем драйвер Microsoft для Node.JS для SQL Server.

Драйвер поддерживает обратные вызовы (здесь мы подключаемся к локальному экземпляру 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]);
        }
    });
});

Кроме того, вы можете использовать события (здесь мы подключаемся к SQL Azure a.k.a SQL Azure SQL Database):

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

Если у вас возникли проблемы, сообщите о проблеме в Github: https://github.com/windowsazure/node-sqlserver/issues

Ответ 4

Существует модуль на npm, называемый mssqlhelper

Вы можете установить его в свой проект npm i mssqlhelper

Пример подключения и выполнения запроса:

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

Подробнее об этом можно прочитать здесь: https://github.com/play175/mssqlhelper

: о)

Ответ 5

msnodesql отлично подходит для меня. Вот пример:

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

            }       
        });
    });
});