从Node.js连接到SQL Server数据库

这个问题重复了一些较老的问题,但事情可能从那时起就改变了。

是否有一些官方支持从Node.js连接到SQL Server(例如MS的官方库)? 或者至less有一些维护良好的适合生产级应用的第三方库?

我们通常使用ASP.NET MVC / SQL Server组合,但是目前我有一个任务,其中express / Node.js似乎更合适(我想玩一些新的东西),所以问题是我们是否可以依赖于Node.js和SQL Server的交互。

UPD:似乎微软终于发布了官方驱动: https : //github.com/WindowsAzure/node-sqlserver

我不确定你是否看到这个Node JS的MS SQL模块列表

如果可能的话,使用之后分享您的经验。

祝你好运

这主要是为了未来的读者。 由于问题(至less标题)侧重于“从节点js连接到sql server数据库”,我想关于“mssql”节点模块芯片。

在这一刻,我们有一个稳定版本的NodeJs(“msnodesql”)的Microsoft SQL Server驱动程序可以在这里find: https ://www.npmjs.com/package/msnodesql。 虽然它与Microsoft SQL Server数据库(比其他任何节点模块)本地集成做的很好,但有几件事情需要注意。

“msnodesql”需要在主机上安装一些先决条件(如Python,VC ++,SQL本机客户端等)。 这使得你的“节点”应用程序“Windows”依赖。 如果你对“Windows”的部署很好,使用“msnodesql”是最好的。

另一方面,还有另一个名为“mssql”的模块(可以在这里findhttps://www.npmjs.com/package/mssql ),可以根据configuration使用“tedious”或者“msnodesql”。 虽然这个模块可能不像“msnodesql”那么全面,但它几乎解决了大部分的需求。

如果您想以“mssql”开头,我遇到了一个简单而直接的video,这个video解释了如何使用NodeJs连接到Microsoft SQL Server数据库: https : //www.youtube.com/watch?v = MLcXfRH1YzE

以上video的源代码可以在这里find: http : //techcbt.com/Post/341/Node-js-basic-programming-tutorials-videos/how-to-connect-to-microsoft-sql-server-using-节点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(); 

我们刚刚发布了针对SQL Server连接的Node.JS预览驱动程序。 你可以在这里find它: 介绍SQL Server的Node.JS的微软驱动程序 。

驱动程序支持callback(在这里,我们连接到本地的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

在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

:O)

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