Node.jsに最適なプロジェクトがありますが、ODBCデータベースに接続する必要があり、Windowsで実行する必要があります。Linuxではnodejs用のODBCモジュールが表示されますが、Windowsでは表示されません。誰かがこれを行う方法について何か提案がありますか?
5 に答える
あなたが私と同じように Google からここにたどり着いた場合、あなたは古い (つまり古代の) システムを持っているため、WSH (wscript) を nodejsと結合することは可能で、npm モジュール "win32ole" に警告されました: https:/ /www.npmjs.com/package/win32ole .
単なる ODBC ソリューションではありませんが、「win32ole」を使用すると、古い WSH と同様に、windblows ボックスで非常に多くのことを実行できます。
var win32ole = require('win32ole');
. . .
// Create an ADODB.Connection Object
dbcon = new ActiveXObject('ADODB.Connection');
(私のように)、アクセス DB に接続しているために 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# でリポジトリスタイルのデータ アクセス レイヤーを記述し、それを 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);
});
NodeJS にはある程度の可能性がありますが、まだおもちゃです。フロントエンド プログラマーとバックエンド プログラマーが交換可能であるという考えはばかげています。でもそれは論外…。
Microsoftは独自のドライバーをリリースしました。私はそれらを試したことがないので、それらがどれほど優れているかわかりません. 過去 8 か月間に NodeJS プログラマーの求人情報を複数見たので、彼らはある程度良いに違いないと思います。(また、応答しません)。