我有一个非常适合 Node.js 的项目,但它必须连接到 ODBC 数据库并且必须在 Windows 上运行。我在 linux 上看到了 nodejs 的 ODBC 模块,但没有在 windows 上看到。有人对如何做到这一点有任何建议吗?
5 回答
如果你像我一样从谷歌来到这里,因为你有旧的(即古老的)系统,我遇到了是否可以将 WSH(wscript)与 nodejs 结合起来,并被告知 npm 模块“win32ole”:https:/ /www.npmjs.com/package/win32ole。
虽然不仅仅是 ODBC 解决方案,但“win32ole”确实让您能够在风吹盒上做很多事情,就像旧的 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,一个需要将代码构建为原生的模块......
与我们多年来在 ADO.NET 中提供的强大且高性能的数据库驱动程序相比,Windows 上 node.js 的数据库驱动程序的状态似乎有些不成熟。
我会认真考虑使用Edge在进程中调用 C# 或 CLR 程序集来访问您的数据库。您可以在 C# 中编写存储库样式的数据访问层并从 node.js 调用它。
我已经证明这在使用 C#、PetaPoco(可选)、.NET 4.5 和 Oracle ODP 驱动程序 (Oracle.DataAccess.dll) 以及 ADO.NET + SQL Server 的开发环境中有效。这应该适用于您可以在 .NET 中与之交谈的任何数据库。
调用 .NET CLR 函数的节点(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-odbc说它是适用于 Linux的unixODBC,但它也适用于 Windows,我在这里使用它。它只是不包含二进制文件,因此您需要在安装 node-odbc 之前安装 windows-build-tools 和 node-gyp 才能构建二进制文件。
npm i -g windows-build-tools
npm i -g node-gyp
npm i odbc
我正在启动 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 程序员的职位发布。(也没有响应)。