2012-11-21 8 views
9

Mam projekt, który byłby idealny dla Node.js, ale musi się połączyć z bazą danych ODBC i musi działać w systemie Windows. Widzę moduły ODBC dla nodejów na Linuksie, ale nie okna. Czy ktoś ma jakieś sugestie, jak to zrobić?Nodejs ODBC Connection na Windows

+0

dobrze, miałem zaprogramować własną rękę w Visual C++ i dodaj go jako dodatek node.js. Na razie działa dobrze. – Clint

+1

Myślę, że napisanie dodatku, którego szukasz, uprawnia cię do udzielenia odpowiedzi i wtyczki bez wstydu z linkiem do dodatku. –

+0

Ha ha, może masz rację Erik, ale dodatek jest teraz tak gówniany, że nie chciałbym go posiadać. Moje umiejętności C++ są dość złe. Co gorsza, nie zakończyło się to asynchronią, co naprawdę pokonało mój punkt widzenia. Skończyło się na użyciu pythona, który ma świetną obsługę odbytu w Windows :-) – Clint

Odpowiedz

-9

NodeJS ma pewien potencjał, ale nadal jest zabawką. Pomysł, że programista frontendowy i programista zaplecza są wymienne, jest śmieszny. Ale to nie jest temat ...

Microsoft released własny sterownik (s). Nie próbowałem ich, więc nie mam pojęcia, jak są dobrzy. Wyobrażam sobie, że muszą one być dość dobre, ponieważ widziałem wiele ofert pracy dla programistów NodeJS w ciągu ostatnich 8 miesięcy. (również nie reaguje).

+1

To łącze jest do macierzystego sterownika SQL Server, a nie ogólnego sterownika ODBC dla systemu Windows (który prawdopodobnie nie istnieje). – JohnnyHK

+1

Chociaż plik node.js nadal jest zabawką, teraz pasuje do wielkiego przypadku użycia. Opakowanie DB, które udostępnia interfejs API. Został zaprojektowany od podstaw jako asynchroniczny i jest już w dużych aplikacjach produkcyjnych. Tutaj jest starszy artykuł: http://blog.appfog.com/node-js-jest-przetworzeniem-przedsiębiorstwem-pozostaje-podoba-i-nie-z- – Clint

+1

Nigdy nie spotkałeś nikogo, kto mógł obsłużyć oba? –

1

Uruchamiam plik node.js, mam dość programu csript.exe, który jest głównym powodem. To cholernie potężne i bardzo imponujące, zajęło mi 1h, aby ustawić całą siatkę w pełni funkcjonalną. Cóż, nie jestem tutaj, aby promować node.js, jestem noob na tym. dowiem się jednak coś bardzo przydatne ... http://syskall.com/how-to-write-your-own-native-nodejs-extension/

Więc zamiast C++ ponawianie co będzie zawsze zrobić lepiej, używam zarówno node.js i C++ dla maksymalnej wydajności w ten sposób.

+0

link niedostępny? – ChristianNRW

4

Jeśli jesteście tacy jak ja i przybyliście tutaj z Google, ponieważ macie stare (tj. Stare) systemy, natknęłam się na Is it possible to marry WSH (wscript) with nodejs i zostałem ostrzeżony do modułu npm "win32ole": https://www.npmjs.com/package/win32ole.

Chociaż nie jest to tylko rozwiązanie ODBC, "win32ole" daje możliwość robienia wielu rzeczy na pudle windblows, tak jak robił to stary WSH.

var win32ole = require('win32ole'); 
. . . 
// Create an ADODB.Connection Object 
dbcon = new ActiveXObject('ADODB.Connection'); 

Jeśli (jak ja), jesteś po połączeniu ODBC, ponieważ łączysz do DB dostępu, to nie jest nawet skrypt do połączenia za pomocą bezpośrednio Jet:

https://github.com/idobatter/node-win32ole/blob/master/examples/access_mdb_sample.js

Edycja: wymaga węzła-gyp, modułu, który wymaga kodu budowy na natywny ...

2

Stan sterowników bazy danych dla węzła node.js w systemie Windows wydaje się nieco niedojrzały w porównaniu do niezawodnych i wysoce wydajnych sterowników baz danych, które mieć dostępne w ADO.NET od lat.

Chciałbym poważnie rozważyć użycie Edge do wywołania C# lub procesora CLR w procesie, aby uzyskać dostęp do bazy danych. Możesz napisać warstwę dostępu do danych w stylu C# w stylu Repository i wywołać ją z node.js.

Udowodniłem, że to działa w kontekście programowania z C#, PetaPoco (opcjonalnie), .NET 4.5 i Oracle ODP (Oracle.DataAccess.dll) oraz z ADO.NET + SQL Server. Powinno to działać z każdą bazą danych, z którą możesz rozmawiać w .NET.

Node (server.js) przykład wywołać funkcję .NET CLR:

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# wygląda następująco (pamiętać trzeba umieścić ciąg połączenia w node.exe.config w folderze, który zawiera node.exe):

public async Task<object> GetData(object param) 
    { 
     using (var db = new Database("NameOfConnString")) 
     { 
      return db.Fetch<dynamic>("SELECT * FROM sometable"); 
     } 
    } 

Alternatywnie, jeśli używasz SQL Server, możesz użyć edge-sql.

przykład Node (server.js) za pomocą krawędzi-SQL (uwaga trzeba umieścić ciąg połączenia do zmiennej środowiskowej zgodnie docs krawędziowych-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); 
});