2011-03-01 91 views
67

¿Hay alguna manera de que pueda obtener mi aplicación Node.js para comunicarse con Microsoft SQL? No he visto ningún controlador MS SQL por ahí en la naturaleza?Node.js y Microsoft SQL Server

Estoy poniendo una aplicación muy sencilla juntos y tienen que ser capaces de comunicarse con una base de datos MS SQL existente (de lo contrario habría ido con MongoDB o Redis)

+0

similar a esta pregunta http://stackoverflow.com/questions/4728385/connecting-to-a-remote-microsoft-sql-server-from-node-js –

+0

Hice una búsqueda de "node.js SQL Servidor "y variaciones de esa cadena pero no encontró ninguna respuesta. –

Respuesta

21

nosotros acaba de lanzar los controladores de vista previa para Node.JS para la conectividad de SQL Server.Los puede encontrar aquí: http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx

+0

esto no está en npm, ¿verdad? ¿planeas ponerlo allí? – NicoGranelli

+1

Lo agregué en NPM la semana pasada :) http://search.npmjs.org/#/node-sqlserver – kop48

+4

Esto es Windows solo por el momento. Supongo que la mayoría de las personas que usan SQL Server o Azure son usuarios de Windows, pero hay bastantes que simplemente tienen su sistema existente en el mundo de SQL Server. A continuación se menciona al usuario de ODBC multiplataforma para aquellos que quieran conservar una opción de Linux en el futuro. Y MS ... tisk tisk ... nodo de soporte multiplataforma y luego esta basura. –

10

Usted podría utilizar quizá node-tds.js:

Una aplicación interesante del protocolo TDS para Node.js para permitir la comunicación con el servidor SQL ...

USO:

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;"); 
+0

Impresionante. No vi eso antes. Muchas gracias. –

+12

La descripción del proyecto ahora dice '* EXPERIMENTAL y actualmente ABANDONADO *' –

+0

Este proyecto alternativo de github podría ser útil hasta que MS agregue soporte oficial. https://github.com/vivina/node-mssql – booyaa

-3

que enlazan detalles solo una solución sql 2000, no sql 2005 ni sql 2008, y también ese código solo permite el envío de texto sql, y no permite la ejecución de procedimientos almacenados.

La verdadera solución sería instalar el nodo JS en un servidor Linux, o en un servidor Linux virtual en una máquina Windows, y luego ir al sitio web de Microsoft y descargar los controladores java JDBC e instalar los microsoft ms sql java jdbc controladores en el servidor Linux o en el servidor virtual de Linux.

+0

No estoy particularmente cómodo con Linux, así que trato de hacer el mínimo administrador de sistema como sea posible. Hacer una configuración JDBC suena desordenado, y si hay un controlador de nodo que está disponible como un módulo que hará la vida mucho más fácil. Tienes razón en que no tener soporte para procedimientos almacenados no es genial. –

+1

Pero estos controladores son solo para Java. ¿Cómo usarías JDBC en NodeJS? –

+0

No lo he probado, pero está [node-jdbc] (https://github.com/CraZySacX/node-jdbc). – Beau

24

Recientemente se lanzaron un par de nuevos clientes de SQL de node.js. Escribí uno llamado node-tds y hay otra llamada tedious

+0

Gracias por la respuesta. Su cliente no confía en .net de ninguna manera, ¿es eso correcto? ¿Esto está relacionado de alguna manera con el proyecto tds de oren mazor? –

+0

Mi cliente es 100% JS nativo (en realidad CoffeeScript) como es Tedious. No está relacionado de ninguna manera con el proyecto de Oren Mazor y si fuera mejor idear nombres de biblioteca, habría pensado en algo mejor y menos ambiguo. –

+0

@Chad Retz: parece una solución para un proyecto en el que estoy trabajando. Actualmente hay un punto de entrada .Net a través de JavaScript que realiza una llamada a la base de datos y devuelve JavaScript. Esto eliminará ese paso intermedio más lento. Sin embargo, ¿qué pasa con el agrupamiento de conexiones, y estarás escribiendo soporte para TVP de SQL Server 2008? – ElHaix

5

TSQLFTW - T-SQL para la victoria (dows) - por Fosco Marotto https://github.com/gfosco/tsqlftw

Es un C# y ADO .NET solución administrada código, con una Contenedor de C++ que Node.js puede importar y trabajar.


Si conoce .NET puede probar WCF Data Services (ADO.NET Data Services); escribir una aplicación WCF para acceso a datos y el uso de odata (REST en los esteroides) para interactuar con la base de datos Servicios


Si usted está en SOA y use SQL Server 2005, puede consultar los Servicios web nativos XML para Microsoft SQL Server 2005

http://msdn.microsoft.com/en-us/library/ms345123(v=sql.90).aspx

Se puede tener acceso a SQL Server como un servicio web (HTTP, SOAP)

2

Si está ejecutando en la mirada .NET en entityspaces.js a, estamos creando un ORM universal de la totalidad de Node.js que no lo hará requerir un servicio WCF JSON ... https://github.com/EntitySpaces/entityspaces.js

Si está utilizando la tecnología de back-end MSFT se podría utilizar ahora, sin embargo, estamos creando una universales Node.js ORM y tendremos más información acerca de que pronto

7

(duplicando mi respuesta de otra pregunta).

Recomendaría node-mssql, que es una buena envoltura para otros conectores, siendo mi elección previa (Tedious) la opción más bonita de una interfaz. Esta es una implementación de JavaScript, sin requisitos de compilación, lo que significa que puede trabajar tanto en entornos Windows como en entornos que no sean Windows.

Otra opción, si no te importa traer .Net o Mono con un puente binario sería usar edge.js. Que puede ser muy bueno si se desea aprovechar las bibliotecas de .NET en Node.js

node-tds es abandonado, node-odbc no funciona con Windows, y no parece que el conductor MS node-sqlserver para trabajar en los no-ventanas (y tiene algunos requisitos ridículos).

8

Hay otro módulo que puede usar: node-mssql. Utiliza otros módulos TDS como controladores y ofrece una interfaz unificada fácil de usar. También agrega características adicionales y correcciones de errores.

características adicionales:

  • interfaz unificada para múltiples conductores MSSQL
  • agrupación de conexiones con Transacciones y Declaraciones preparadas
  • procedimientos almacenados parametrizados para todos los conductores
  • serialización de Geografía y Geometría CLR tipos
  • tipo de datos JS inteligente a mapeo de tipos de datos SQL
  • apoyan ambos Promesas y devoluciones de llamada estándar
44

La pregunta original es viejo y ahora usando node-mssql como respondida por @Patrik Šimek que envuelve Tedious como contestada por @ Tracker1 es el mejor camino a seguir.

El Windows/Azure node-sqlserver driver mencionado en la respuesta aceptada requiere que instale una lista absurda de requisitos previos: Visual C++ 2010, SQL Server Native Client 11.0, python 2.7.x y probablemente también Windows 7 SDK para 64 bits en su servidor. No desea instalar todos estos GB de software en su servidor de Windows si me lo pregunta.

Realmente quiere usar Tedious.Pero también usa node-mssql para envolverlo y hacer que la codificación sea mucho más fácil.

Actualización Agosto 2014

  • Ambos módulos están siendo mantenido activamente. Los problemas se responden de forma bastante rápida y eficiente.
  • Ambos módulos soportan SQL Server 2000-2014
  • Transmisión apoyado desde el nodo-mssql 1.0.1

actualización de febrero el año 2015 - 2.x (estable, NPM)

  • Actualizado las últimas tediosas 1.10
  • promesas
  • solicitud de tuberías a objeto de secuencia
  • errores detallados SQL
  • Transacción Interrupción de manejo
  • Integrado Tipo cheques
  • CLI
  • Menor fija

Esto es evidente Tedious:

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); 
} 

Aquí viene node-mssql que tiene tedioso como una dependencia. ¡Utilizar esta!

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); 
    }); 
}); 
+1

Gracias por su útil respuesta. Parece que los autores se esforzaron por una nomenclatura precisa al nombrar a su paquete "Tedious". En el momento de esta publicación, MSNodeSQL en github no se ha modificado en aproximadamente 8 meses, mientras que esta solución se actualizó por última vez hace 20 días. Este parece ser el único controlador MS-SQL de Node.js regularmente actualizado en este momento. – Conor

+0

Gracias Chris, gran respuesta. Debo preguntar, ¿por qué mencionas que Tedious/node-mssql es la mejor manera, especialmente en Windows?Ambos módulos están escritos en javascript puro y deberían funcionar igualmente bien en todos los sistemas que pueden ejecutar nodejs. –

+0

@ PatrikŠimek gracias. Actualicé la respuesta con una mención que ambos son Javascript puro como una razón de por qué usarlos en Windows. Creo que eso es lo que querías decir. –

1

conductores Node.js SQL Server parecen muy inmaduro - hay una mezcolanza de diferentes proyectos con diferentes dependencias, el rendimiento y los niveles de integridad, ninguno de los cuales inspiran confianza.

Propongo usar edge-sql. Esto aprovecha el ecosistema de controladores de bases de datos maduras de .NET, y solo depende de .NET (un obviedad si está ejecutando un nodo en Windows, si no hay Mono, pero no lo he intentado).

Aquí está un ejemplo de nodo (server.js) usando borde-SQL (tenga en cuenta que necesita para poner la cadena de conexión en una variable de entorno según documentos borde-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); 
}); 

También puede aprovechar Edge.js con .NET para acceder a otras bases de datos, como Oracle. He dado un ejemplo de ese enfoque here.

0

El estado en mayo de 2016 es el siguiente.

El controlador Microsoft SQL oficial para el nodo, llamado node-sqlserver, no se ha actualizado durante varios años.

Hay una nueva horquilla en esto llamada node-sqlserver-v8 que funciona con las versiones de nodo 0.12.x. y> = 4.1.x. Esta horquilla también tiene binarios precompilados para objetivos x64 y x86.

El paquete está disponible en NPM como msnodesqlv8.

Recomiendo este paquete porque es liviano (no tiene dependencias) y es el único que funciona con todas las versiones recientes de SQL Server, incluido SQL LocalDB.

Cuestiones relacionadas