Conectarse a la base de datos de SQL Server desde Node.js
sql-server (6)
La pregunta duplica algunas preguntas antiguas, pero las cosas pueden haber cambiado desde entonces.
¿Existe algún soporte oficial para conectarse a SQL Server desde Node.js (por ejemplo, la biblioteca oficial desde MS)? ¿O al menos alguna biblioteca de terceros bien mantenida adecuada para una aplicación de grado de producción?
Usualmente usamos la combinación ASP.NET MVC / SQL Server, pero actualmente tengo una tarea para la cual expreso / Node.js parece ser más apropiado (y me gustaría jugar con algo nuevo), por lo que la pregunta es si podemos confiar en una interacción Node.js y SQL Server.
UPD: Parece que Microsoft, por fin, ha lanzado el controlador oficial: https://github.com/WindowsAzure/node-sqlserver
Acabamos de lanzar el controlador de vista previa para Node.JS para la conectividad de SQL Server. Puede encontrarlo aquí: Presentamos el controlador de Microsoft para Node.JS para SQL Server .
El controlador admite devoluciones de llamada (aquí, nos estamos conectando a una instancia local de SQL Server):
// Query with explicit connection
var sql = require(''node-sqlserver'');
var conn_str = "Driver={SQL Server Native Client 11.0};Server=(local);Database=AdventureWorks2012;Trusted_Connection={Yes}";
sql.open(conn_str, function (err, conn) {
if (err) {
console.log("Error opening the connection!");
return;
}
conn.queryRaw("SELECT TOP 10 FirstName, LastName FROM Person.Person", function (err, results) {
if (err) {
console.log("Error running query!");
return;
}
for (var i = 0; i < results.rows.length; i++) {
console.log("FirstName: " + results.rows[i][0] + " LastName: " + results.rows[i][1]);
}
});
});
Alternativamente, puede usar eventos (aquí, nos estamos conectando a SQL Azure, también conocida como Windows Azure SQL Database):
// Query with streaming
var sql = require(''node-sqlserver'');
var conn_str = "Driver={SQL Server Native Client 11.0};Server={tcp:servername.database.windows.net,1433};UID={username};PWD={Password1};Encrypt={Yes};Database={databasename}";
var stmt = sql.query(conn_str, "SELECT FirstName, LastName FROM Person.Person ORDER BY LastName OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY");
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); });
Si tiene algún problema, presente un problema en Github: https://github.com/windowsazure/node-sqlserver/issues
Esto es principalmente para futuros lectores. Como la pregunta (al menos el título) se enfoca en "conectarse a la base de datos del servidor sql desde el nodo js", me gustaría incluir el módulo de nodo "mssql".
En este momento, tenemos una versión estable del controlador Microsoft SQL Server para NodeJs ("msnodesql") disponible aquí: https://www.npmjs.com/package/msnodesql . Si bien hace un gran trabajo de integración nativa a la base de datos de Microsoft SQL Server (que cualquier otro módulo de nodo), hay algunas cosas sobre las que se debe tener en cuenta.
"msnodesql" requiere algunos requisitos previos (como Python, VC ++, cliente nativo de SQL, etc.) para instalarse en la máquina host. Eso hace que tu aplicación de "nodo" dependa de "Windows". Si está de acuerdo con la implementación basada en "Windows", trabajar con "msnodesql" es lo mejor.
Por otro lado, hay otro módulo llamado "mssql" (disponible aquí https://www.npmjs.com/package/mssql ) que puede funcionar con "tedious" o "msnodesql" según la configuración. Si bien este módulo puede no ser tan completo como "msnodesql", prácticamente resuelve la mayoría de las necesidades.
Si desea comenzar con "mssql", encontré un video simple y directo, que explica cómo conectarse a la base de datos de Microsoft SQL Server utilizando NodeJs aquí: https://www.youtube.com/watch?v=MLcXfRH1YzE
El código fuente para el video de arriba está disponible aquí: http://techcbt.com/Post/341/Node-js-basic-programming-tutorials-videos/how-to-connect-to-microsoft-sql-server-using-node-js
Por si acaso, si los enlaces anteriores no funcionan, incluyo el código fuente aquí:
var sql = require("mssql");
var dbConfig = {
server: "localhost//SQL2K14",
database: "SampleDb",
user: "sa",
password: "sql2014",
port: 1433
};
function getEmp() {
var conn = new sql.Connection(dbConfig);
conn.connect().then(function () {
var req = new sql.Request(conn);
req.query("SELECT * FROM emp").then(function (recordset) {
console.log(recordset);
conn.close();
})
.catch(function (err) {
console.log(err);
conn.close();
});
})
.catch(function (err) {
console.log(err);
});
//--> another way
//var req = new sql.Request(conn);
//conn.connect(function (err) {
// if (err) {
// console.log(err);
// return;
// }
// req.query("SELECT * FROM emp", function (err, recordset) {
// if (err) {
// console.log(err);
// }
// else {
// console.log(recordset);
// }
// conn.close();
// });
//});
}
getEmp();
El código anterior es bastante explicativo. Definimos los parámetros de conexión db (en el objeto JS "dbConfig") y luego usamos el objeto "Connection" para conectarnos a SQL Server. Para ejecutar una instrucción "SELECT", en este caso, utiliza el objeto "Request" que trabaja internamente con el objeto "Connection". El código explica los dos tipos de uso de ejecuciones basadas en "promesa" y "devolución de llamada".
El código fuente anterior explica solo sobre la conexión a la base de datos del servidor SQL y la ejecución de una consulta SELECT. Puede llevarlo fácilmente al siguiente nivel si sigue la documentación del nodo "mssql" disponible en: https://www.npmjs.com/package/mssql
ACTUALIZACIÓN: Hay un nuevo video que realiza operaciones CRUD utilizando el estándar REST Node.js puro (con Microsoft SQL Server) aquí: https://www.youtube.com/watch?v=xT2AvjQ7q9E . Es un video fantástico que explica todo desde cero (tiene un montón de código y no será agradable explicar / copiar el código completo aquí)
Hay un módulo en npm llamado mssqlhelper
Puede instalarlo en su proyecto por npm i mssqlhelper
Ejemplo de conectar y realizar una consulta:
var db = require(''./index'');
db.config({
host: ''192.168.1.100''
,port: 1433
,userName: ''sa''
,password: ''123''
,database:''testdb''
});
db.query(
''select @Param1 Param1,@Param2 Param2''
,{
Param1: { type : ''NVarChar'', size: 7,value : ''myvalue'' }
,Param2: { type : ''Int'',value : 321 }
}
,function(res){
if(res.err)throw new Error(''database error:''+res.err.msg);
var rows = res.tables[0].rows;
for (var i = 0; i < rows.length; i++) {
console.log(rows[i].getValue(0),rows[i].getValue(''Param2''));
}
}
);
Puedes leer más sobre esto aquí: https://github.com/play175/mssqlhelper
: o)
No estoy seguro de ver esta lista de módulos MS SQL para Node JS
Comparte tu experiencia después de usar uno si es posible.
Buena suerte
https://www.npmjs.com/package/msnodesql está funcionando muy bien para mí. Aquí hay una muestra:
var mssql = require(''msnodesql''),
express = require(''express''),
app = express(),
nconf = require(''nconf'')
nconf.env()
.file({ file: ''config.json'' });
var conn = nconf.get("SQL_CONN");
var conn_str = "Driver={SQL Server Native Client 11.0};Server=server.name.here;Database=Product;Trusted_Connection={Yes}";
app.get(''/api/brands'', function(req, res){
var data = [];
var jsonObject = {};
mssql.open(conn_str, function (err, conn) {
if (err) {
console.log("Error opening the connection!");
return;
}
conn.queryRaw("dbo.storedproc", function (err, results) {
if(err) {
console.log(err);
res.send(500, "Cannot retrieve records.");
}
else {
//res.json(results);
for (var i = 0; i < results.rows.length; i++) {
var jsonObject = new Object()
for (var j = 0; j < results.meta.length; j++) {
paramName = results.meta[j].name;
paramValue = results.rows[i][j];
jsonObject[paramName] = paramValue;
}
data.push(jsonObject); //This is a js object we are jsonizing not real json until res.send
}
res.send(data);
}
});
});
});
//start the program
var express = require(''express'');
var app = express();
app.get(''/'', function (req, res) {
var sql = require("mssql");
// config for your database
var config = {
user: ''datapullman'',
password: ''system'',
server: ''localhost'',
database: ''chat6''
};
// connect to your database
sql.connect(config, function (err) {
if (err) console.log(err);
// create Request object
var request = new sql.Request();
// query to the database and get the records
request.query("select * From emp", function (err, recordset) {
if (err) console.log(err)
// send records as a response
res.send(recordset);
});
});
});
var server = app.listen(5000, function () {
console.log(''Server is running..'');
});
// crear una tabla como emp en una base de datos (he creado como chat6)
// programs ends here
// guárdelo como app.js y ejecute como node app.js // abra en su navegador como localhost: 5000