Cómo conectarse a una base de datos SQL Server desde Node.js
Con el paquete de Microsoft de SQL Server para Node.js, las aplicaciones de servidor pueden conectarse a un servidor de SQL Azure directamente. Esto permite que podamos utilizar toda la potencia de un motor de base de datos relacionar durante el desarrollo de aplicaciones web basadas en Node.js
Configurando el entorno de trabajo
El driver de SQL Server para Node.js utiliza el SQL Server Native Client que permite a todas las aplicaciones utilizar las características de SQL Server. Aunque en Windows Azure este cliente está disponible para todos los tipos de hosting, puede que en durante el desarrollo local sea necesario instalar este paquete.
Este se puede descargar desde aquí: https://www.microsoft.com/en-us/download/details.aspx?id=29065
Creando una base de datos SQL Server
Antes de poder empezar hay que crear una base de datos desde cero, para ello, desde el portal de Windows Azure, hay que pulsar en +New y luego ir a Data Services, una vez allí seleccionar SQL Database
El siguiente paso es rellenar el tipo de servidor, Web o Business y el tamaño de la base de datos.
Una vez seleccionado se procede a introducir las credenciales del servidor de base de datos que alojará la base de datos.
A partir de ese instante ya está creada la base de datos y se puede proceder a utilizarla desde Node.js
Instalando el paquete de node-sqlserver
En el anterior artículo Trabajando con Windows Azure Storage desde Node.js se especificaba un fichero llamado package.json que contenía la configuración de la aplicación de Node.js y además definía las dependencias de la misma. Ahora al usar node-sqlserver hay que añadirlo como dependencia para que el sistema pueda descargar el paquete durante el proceso de npm install que se ejecuta cuando se hace el despliegue a Windows Azure.
{
{
"name": "DpeSpainNodeJS",
"version": "0.1.0",
"private": false,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "3.4.8",
"jade": "*",
"azure": "*",
"node-sqlserver": "*"
}
}
Para poder continuar con la instalación del paquete de node-sqlserver se necesitan los siguientes prerrequisitos previos:
- Node-gyp, que se puede instalar a través de npm install –g node-gyp
- Python 2.7.x para node-gyp. Es importante que sea esta versión porque si no, no se podrá compilar el paquete.
- Visual C++ 2010
- SQL Server Native Client
Una vez que se han resuelto estos prerrequisitos el siguiente paso es ejecutar el comando de npm install que resuelve todas las dependencias de esta aplicación.
Ejecutando una consulta contra SQL Server
Una vez que ya se tiene el módulo de SQL Server para Node.js ya se pueden ejecutar consultas con respecto la base de datos. Para empezar a trabajar el primer paso es tener la cadena de conexión al servidor de base de datos donde está alojada la base de datos.
Las cadenas de conexión de SQL Server tienen este aspecto:
Driver={SQL Server Native Client
10.0};Server=tcp:{dbservername}.database.windows.net,1433;Database={database};Uid={username};Pwd={password};Encrypt=yes;Connection
Timeout=30;"
Y esa cadena de conexión hay que proporcionarla cada vez que se hace una consulta al driver.
var sql = require('node-sqlserver');
var conn_str = "Driver={SQL Server Native Client 10.0};Server=tcp:{dbservername}.database.windows.net,1433;Database={database};Uid={username};Pwd={password};Encrypt=yes;Connection
Timeout=30;";
sql.query(conn_str, "SELECT * FROM TestTable", function (err, results) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
res.writeHead(200, { 'Content-Type': 'text/plain' });
for (var i = 0; i < results.length; i++) {
res.write("ID: " + results[i].ID + " Column1: " + results[i].Column1 + "
Column2: " + results[i].Column2);
}
res.end("; Done.");
});
Además de eso el objeto que devuelve el método query tiene varios eventos que permiten ser notificados en base a los diferentes tipos de eventos que el sistema proporcional.
A continuación una lista de esos eventos.
var stmt = sql.query(conn_str, "SELECT * FROM TestTable");
stmt.on('meta', function (meta) { console.log("We've received the metadata"); });
stmt.on('row', function (idx) { console.log("We've started receiving a row"); });
stmt.on('column', function (idx, data, more) { console.log(idx + ":" + data);});
stmt.on('done', function () { console.log("All done!"); });
stmt.on('error', function (err) { console.log("We had an error: " + err); });
Consideraciones a la hora de publicar en Windows Azure
Windows Azure no instala dinámicamente el paquete de node-sqlserver en tiempo de ejecución, por lo que se tiene que tener cuidado de incluir el binario en la carpeta.
El fichero binario se llamada sqlserver.node y sql.js y se puede descargar desde la web de Microsoft
Luis Guerrero.
Technical Evangelist Windows Azure.
Comments
Anonymous
September 30, 2014
Buenas Luis, estoy algo perdido, una vez que realicé la suscripción y creé la base de datos, qué temgo que hacer con el sqlserver.node y el sql.js? copiarlos a la carpeta donde se encuentra el index?Anonymous
September 30, 2014
Hola Nico, lo que menciono en el post, es que el módulo de Node.js de SQL Server lo incluyas en el servidor con el fichero binario del driver de SQL Server.