Usar SQL Azure desde NodeJS

Estos días he estado montando un entorno de demo con NodeJS y uno de los escenarios que estaba valorando era utilizar SQL Azure desde este lenguaje. Lo cierto es que gracias al paquete mssql es muy sencillo trabajar con bases de datos SQL Server. Lo primero que debes hacer es instanciar el módulo y definir la configuración para la conexión:

var sql = require('mssql');

var config = {
    user: 'USERNAME',
    password: 'PASSWORD',
    server: 'sqlservergis.database.windows.net',
    database: 'nodejsdb',

    options:{
        encrypt: true
    }
};

sql.connect(config,function(err){
    console.log(err);
});

Como puedes ver gestionar la conexión es bastante sencillo. Es muy importante marcar la conexión como encrypt: true cuando trabajas con SQL Azure. A partir de este momento, podrás instanciar el módulo desde cualquier lugar de tu aplicación sin necesidad de recrear la configuración, ya que estará disponible desde este momento.

Para este ejemplo, voy a crear incluso una tabla desde el propio código sobre la que poder operar y añadirle algunos registros:

var table = new sql.Table('books');
table.create = true;
table.columns.add('id', sql.Int, { nullable: false, primary: true });
table.columns.add('title', sql.VarChar(50), { nullable: false });
table.columns.add('author', sql.VarChar(50), { nullable: false });
table.rows.add(1, 'MyBook', 'MyAuthor');
table.rows.add(2, 'The Dark World', 'Henry Kuttner');
table.rows.add(3, 'Les Misérables', 'Victor Hugo');

var request = new sql.Request();
request.bulk(table, function (err, rowCount) {
    if (err) {
        console.log("Error: %s", err);
    }
    console.log("New %i rows added", rowCount);
}); 

Una vez hecho esto ya tenemos una tabla sobre la que recuperar información de la base de datos en Microsoft Azure. La forma más sencilla de hacer una consulta es la siguiente:

var request = new sql.Request();
request.query('select * from books', function (err, recordset) {
    console.log(recordset);
});

Lo genial de este paquete es que este ya devuelve el contenido en formato JSON, por lo que no es necesario hacer ningún tipo de conversión con la respuesta.

mssql - JSON result
mssql – JSON result

Si lo que necesitas es pasar algún parámetro a las consultas, que suele ser lo habitual, puedes hacerlo a través de lo que se conoce como Prepared Statements:

var ps = new sql.PreparedStatement();
ps.input('id', sql.Int);
ps.prepare('select * from books where id = @id', function (err) {
    ps.execute({ id: req.params.id }, function (err, recordset) {
        if (err) {
            console.log('Error: %s', err);
        }
    });
});

En la página del paquete mssql puedes encontrar toda esta información y mucha más sobre cómo trabajar con este tipo de base de datos desde tu nuevo lenguaje preferido.

¡Saludos!