我有一个完美的Node.js项目,但它必须连接到一个ODBC数据库,它必须在Windows上运行。 我在linux上看到nodejs的ODBC模块,但没有看到windows。 有没有人有任何build议如何做到这一点?
如果你像我一样,从谷歌来到这里,因为你有旧的(即古老的)系统,我碰到可以嫁给WSH(wscript)与nodejs ,并提醒npm模块“win32ole”: https:/ / /www.npmjs.com/package/win32ole 。
虽然不仅仅是一个ODBC解决方案,“win32ole”确实能让你在windblows盒子上做很多事情,就像老式的WSH一样。
var win32ole = require('win32ole'); . . . // Create an ADODB.Connection Object dbcon = new ActiveXObject('ADODB.Connection');
如果(像我一样),因为你连接到一个访问数据库,你是在ODBC连接之后,甚至有一个示例脚本直接使用Jet连接:
https://github.com/idobatter/node-win32ole/blob/master/examples/access_mdb_sample.js
编辑:它确实需要一个node-gyp,一个模块,需要编译本地代码…
Windows上的node.js数据库驱动程序的状态似乎有些不成熟,这与我们在ADO.NET中可用的健壮且高性能的数据库驱动程序相比已经很多年了。
我会认真考虑使用Edge调用C#或进程中的CLR程序集来访问数据库。 你可以在C#中编写一个Repository风格的数据访问层,并从node.js中调用它。
我已经证明这在C#, PetaPoco (可选),.NET 4.5和Oracle ODP驱动程序(Oracle.DataAccess.dll)以及ADO.NET + SQL server的开发环境中起作用 。 这应该适用于任何可以在.NET中使用的数据库。
调用.NET CLR函数的Node(server.js)示例:
var edge = require('edge'); // define CLR function proxy var getData = edge.func({ assemblyFile: '../Repositories/bin/Debug/Repositories.dll', typeName: 'Repositories.TestRepository', methodName: 'GetData' // This must be Func<object,Task<object>> }); // call proxy function getData({ myParam:1 }, function (error, result) { if (error) throw error; console.log(result); });
GetData C#看起来像这样(注意,您需要将连接字符串放在包含node.exe的文件夹中的node.exe.config中):
public async Task<object> GetData(object param) { using (var db = new Database("NameOfConnString")) { return db.Fetch<dynamic>("SELECT * FROM sometable"); } }
或者,如果使用SQL server,则可以使用edge-sql 。
使用edge-sql的节点示例(server.js)(注意你需要把你的连接字符串放到一个环境变量中,像每个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); });
我开始node.js,已经生病的csript.exe是主要原因。 这是该死的强大的,非常令人印象深刻的,花了我1小时,建立一个完整的功能网格。 那么我不是在这里推广node.js,我很喜欢它。 我发现然而东西非常有用… http://syskall.com/how-to-write-your-own-native-nodejs-extension/
因此,不是重做C ++总是会做的更好,而是使用node.js和C ++来获得最大的效率。
NodeJS有一些潜力,但它仍然是一个玩具。 前端程序员和后端程序员是可以互换的想法是可笑的。 但是这是关闭的话题…
微软发布了自己的驱动程序。 我没有尝试过,所以我不知道他们有多好。 我想他们肯定有些好,因为我在过去的8个月里看到过多个NodeJS程序员的招聘信息。 (也不响应)。