2012-04-25 5 views
23

Вопрос дублирует некоторые старые вопросы, но с тех пор ситуация может измениться.Подключиться к базе данных 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

+0

Я искал решение для этого через пару недель ... спасибо за добавление вопроса. Прямо сейчас я также использую тонкое приложение MVC для обработки SQL-соединения, но мне это не нравится. Досадно, что все ответы, которые я могу найти, указывают на те же неработающие модули. –

+1

@MarcelPopescu https://github.com/pekim/tedious, похоже, работает для меня со следующими ограничениями: он не поддерживает транзакции (даже те, которые явно не выписаны вами, но происходят в хранимых процедурах), и она не поддерживает процедуры, возвращающие несколько наборов результатов. Процедуры, возвращающие несколько наборов результатов, должны быть переписаны в любом случае ИМХО; но без транзакций ограничение использования Node.js + MSSQL на простые почти прозрачные интерфейсы (к счастью, это то, что я пишу). – penartur

+0

@MarcelPopescu Надеюсь, что в один прекрасный день MS выпустит официальный MSSQL-драйвер для Node, как это было с остальными функциями платформы Azure. Хотя в то время я, скорее всего, останусь у нынешнего работодателя и буду использовать старые добрые Postgres: D – penartur

ответ

13

Я не уверен, что вы видите этот список MS SQL Modules for Node JS

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

Good Luck

+2

'tsqlftw' кажется неактивным; 'node-mssql' больше недоступен; 'tedious' зависит от' iconv', который использует 'node-waf', который недоступен в Windows, поэтому кажется, что я остался с единственным выбором' tds'. По крайней мере, сегодня я смог подключиться к БД с ним, хотя я еще не выполнял никаких запросов. – penartur

+0

: o, Удачи! – Futur

+1

BTW, 'iconv' является только факультативным для' утомительного', так что в настоящее время я играю с 'утомительным' (хотя еще ничего не сделано). 'tds' не работал для меня: https://github.com/cretz/node-tds/issues/25 – penartur

2

Там есть модуль на НПМ называется 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

: о)

+3

Благодарим вас за ответ, но менее месяца, поддерживаемый одним разработчиком, содержащий комментарии на китайском языке, не создает впечатления от надежной библиотеки производственного класса. Кроме того, если посмотреть на код, кажется, что этот 'mssqlhelper' на самом деле является просто тонким слоем обтекания библиотеки' tds', упомянутой в предыдущих вопросах по этому вопросу. Я хотел бы услышать о надежных хорошо поддерживаемых библиотеках (в идеале, от самой Microsoft), а не о тонких обертках над известными библиотеками. – penartur

+0

И, между прочим, кажется, что автор также украл исходный код пакета TDS (https://github.com/cretz/node-tds/tree/master/lib) для своего mssqlhelper, притворившись, что * play175 * написал сам по себе. – penartur

6

Мы только что выпустили драйвер для предварительного просмотра Node.js для подключения SQL Server. Вы можете найти его здесь: Introducing the Microsoft Driver for Node.JS for 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 аки Windows Azure SQL База данных):

// 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

+1

+1 (и все еще активно - yay!), Но как это может помочь нам связать продукты Visual Studio/.NET? Ваши маркетинговые планы ... они меня путают. –

+1

как вы закрываете соединения db? – gjw80

+0

Большой вопрос. Как устанавливаются соединения? –

0

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

      }  
     }); 
    }); 
}); 
19

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

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

«msnodesql» требует нескольких предварительных условий (например, python, VC++, родной клиент SQL и т. Д.), Которые должны быть установлены на главной машине. Это делает ваше «узловое» приложение «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();

Приведенный выше код довольно сам пояснительный. Мы определяем параметры соединения db (в объекте JS «dbConfig»), а затем используйте объект «Connection» для подключения к SQL Server. Чтобы выполнить оператор «SELECT», в этом случае он использует объект «Запрос», который внутренне работает с объектом «Connection». Код объясняет оба варианта использования «обещаний» и «обратных вызовов».

В приведенном выше исходном коде объясняется только подключение к базе данных sql-сервера и выполнение запроса SELECT. Вы можете легко взять его на следующий уровень, следуя документации «MSSQL» узел доступен по адресу: https://www.npmjs.com/package/mssql

UPDATE: Существует новое видео, которое делает операции CRUD с использованием чистого стандарта Node.js REST (с Microsoft SQL Server) здесь: https://www.youtube.com/watch?v=xT2AvjQ7q9E. Это фантастическое видео, которое объясняет все с нуля (у него очень много кода, и здесь не будет приятно объяснять/копировать весь код)

+0

Я использую node-mssql, и это потрясающе, исходное репо: https://github.com/patriksimek/node-mssql – Kalamarico

+0

Ссылка на видео была действительно полезна. https://www.youtube.com/watch?v=MLcXfRH1YzE –

+1

Я следил за этим, но я продолжаю получать «sql.connection in to constructor». – cleverpaul

Смежные вопросы