Node.js和Microsoft SQL Server
有什么办法可以让我的Node.js应用程序与Microsoft SQL进行通信? 我还没有看到任何MS SQL驱动程序在野外?
我把一个非常简单的应用程序放在一起,需要能够与现有的MS SQL数据库进行通信(否则我会用mongoDB或Redis)
我们刚刚发布了针对SQL Server连接的Node.JS预览驱动程序。 你可以在这里find它们: http : //blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx
原来的问题是旧的,现在使用节点mssql的@PatrikŠimek回答@包装Tedious由@ Tracker1回答是最好的方式去。
在接受的答案中提到的Windows / Azure node-sqlserver驱动程序要求您安装一个疯狂的先决条件列表:Visual C ++ 2010,SQL Server Native Client 11.0,Python 2.7.x以及可能还包括适用于64位的Windows 7 SDK服务器。 如果你问我,你不想在Windows服务器上安装所有这些GB的软件。
你真的想用Tedious 。 但也可以使用node-mssql来包装它,并使编码更容易。
2014年8月更新
- 这两个模块仍然积极维护。 问题得到迅速有效的回应。
- 这两个模块都支持SQL Server 2000 – 2014
- 从节点mssql 1.0.1开始支持stream
2015年2月更新 – 2.x(stable,npm)
- 更新到最新的Tedious 1.10
- 承诺
- pipe道请求对象stream
- 详细的SQL错误
- 事务中止处理
- 综合types检查
- CLI
- 微小的修复
这是单调乏味的 :
var Connection = require('tedious').Connection; var Request = require('tedious').Request; var config = { server: '192.168.1.212', userName: 'test', password: 'test' }; var connection = new Connection(config); connection.on('connect', function(err) { executeStatement(); } ); function executeStatement() { request = new Request("select 42, 'hello world'", function(err, rowCount) { if (err) { console.log(err); } else { console.log(rowCount + ' rows'); } connection.close(); }); request.on('row', function(columns) { columns.forEach(function(column) { if (column.value === null) { console.log('NULL'); } else { console.log(column.value); } }); }); request.on('done', function(rowCount, more) { console.log(rowCount + ' rows returned'); }); // In SQL Server 2000 you may need: connection.execSqlBatch(request); connection.execSql(request); }
这里是node-mssql ,它有一个冗长的依赖。 用这个!
var sql = require('mssql'); var config = { server: '192.168.1.212', user: 'test', password: 'test' }; sql.connect(config, function(err) { var request = new sql.Request(); request.query("select 42, 'hello world'", function(err, recordset) { console.log(recordset); }); });
最近刚刚发布了一些新的node.js SQL服务器客户端。 我写了一个叫做node-tds的 ,还有一个叫做tedious
你也许可以使用node-tds.js :
一个令人兴奋的TDS协议实现node.js允许与sql server通信…
用法:
var mssql = require('./mssql'); var sqlserver = new mssql.mssql(); sqlserver.connect({'Server':__IP__,'Port':'1433','Database':'','User Id':'','Password':''}); var result = sqlserver.execute("SELECT * FROM wherever;");
还有一个模块可以使用 – node-mssql 。 它使用其他TDS模块作为驱动程序,并提供易于使用的统一接口。 它还添加了额外的function和错误修复。
额外function:
- 统一接口多个MSSQL驱动程序
- 与事务和准备语句的连接池
- 所有驱动程序的参数化存储过程
- 地理和几何CLRtypes的序列化
- 智能JS数据types到SQL数据types映射器
- 支持Promise和标准callback
(从另一个问题复制我的答案)。
我会推荐节点mssql ,这是一个很好的包装其他连接器,默认是我以前的select( Tedious )带来一个更好的接口。 这是一个JavaScript的implimentation,没有编译要求,这意味着你可以在Windows和非Windows环境中工作。
另一种select是,如果你不介意将.Net或Mono引入二进制桥,那么可以使用edge.js。 如果你想在node.js中利用.Net库,这可能是非常好的
node-tds被放弃, node-odbc不能和windows一起工作,MS node-sqlserver驱动似乎不能在非windows上工作(并且有一些愚蠢的要求)。
TSQLFTW – WIN(dows)的T-SQL – by Fosco Marotto https://github.com/gfosco/tsqlftw
它是一个C#和ADO .NET托pipe代码解决scheme,带有一个Node.js可以导入和使用的C ++包装器。
如果你知道.NET,你可以尝试WCF数据服务(ADO.NET数据服务); 编写一个用于数据访问的WCF应用程序,并使用odata(类固件上的REST)与数据库进行交互
- WCF数据服务: http : //msdn.microsoft.com/en-us/data/bb931106
- OData: http ://www.odata.org/
如果您正在使用SOA并使用SQL Server 2005,则可以检出Microsoft SQL Server 2005的Native XML Web Services
http://msdn.microsoft.com/en-us/library/ms345123(v=sql.90).aspx
您可以访问SQL Server作为Web服务(HTTP,SOAP)
微软(Windows Azure团队)刚刚发布了SQL SERVER的节点驱动程序。
据我所知,它没有npm包的包,但它是开源的。 也是接受社区的贡献。
https://github.com/WindowsAzure/node-sqlserver
在这里介绍博客文章:
如果你正在.NET上运行看看entityspaces.js at,我们正在为Node.js创build一个完整的通用ORM,它不需要WCF JSON服务… EntitySpaces/entityspaces.html
如果您正在使用MSFT后端技术,现在可以使用它,但是,我们正在创build一个通用的Node.js ORM,并且将会提供更多的信息
有一个来自微软的更新。 这是一系列的博客文章( 第1 部分和第2部分 )。
Node.js SQL Server驱动看起来很不成熟 – 不同的项目有不同的依赖性,性能和完整性级别的混合,没有一个能激发自信。
我会build议使用边缘SQL 。 这充分利用了.NET成熟的数据库驱动生态系统,并且只依赖于.NET(如果你正在Windows上运行节点,那么不用花心思 ,如果没有Mono的话 ,我还没有尝试过)。
这里是一个使用edge-sql的节点示例(server.js)(注意你需要把你的连接string放到一个环境variables中,像每个edge-sql文档一样):
var edge = require('edge'); // edge-sql has built in support for T-SQL / MSSQL Server var getData = edge.func('sql', function () {/* select top 10 * from sometable */ }); getData(null, function (error, result) { if (error) throw error; console.log(result); });
您还可以利用Edge.js和.NET来访问其他数据库,如Oracle。 我在这里举了一个这样的例子。
截至2016年5月的状况如下。
Node的官方微软SQL驱动程序node-sqlserver并没有更新多年。
这个名为node-sqlserver-v8的新叉与Node Versions 0.12.x协同工作。 和> = 4.1.x. 这个分支还为x64和x86目标提供了预编译的二进制文件。
该软件包可在msnodesqlv8上的NPM上使用 。
我推荐这个包,因为它是轻量级的(没有依赖关系),它是唯一一个可以与所有最新版本的SQL Server一起使用的包,包括SQL LocalDB。
现在(2016)你可以使用Sequelize ORM来支持:
- MySQL / MariaDB,
- PostgreSQL的
- SQLite的
- Microsoft SQL Server
根据其Github的明星,它被广泛使用。
该链接的详细信息只有一个SQL 2000的解决scheme,而不是SQL 2005或SQL 2008,也代码只允许发送SQL文本,并不允许执行存储过程。
真正的解决scheme是在linux服务器上安装节点JS,或者在Windows机器上的虚拟linux服务器上安装节点JS,然后到微软网站下载JDBC的java驱动程序,然后安装这些微软的ms sql的java jdbc驱动程序linux服务器或linux虚拟服务器。