这个问题重复了一些较旧的问题,但事情可能已经改变了。
是否有一些官方支持从Node.js连接到SQL Server(例如MS的官方库)?或者至少是一些维护良好的第三方库适合生产级应用程序?
我们通常使用ASP.NET MVC / SQL Server组合,但目前我有一个任务,其中express / Node.js似乎更合适(我想玩一些新东西),所以问题是我们是否可以依赖Node.js和SQL Server交互。
UPD:微软似乎终于发布了官方驱动程序:https://github.com/WindowsAzure/node-sqlserver答案 0 :(得分:26)
这主要面向未来的读者。由于问题(至少标题)侧重于“从节点js连接到sql server数据库”,我想填写关于“mssql”节点模块。
目前,我们在这里提供了一个稳定版本的NodeJs(“msnodesql”)Microsoft SQL Server驱动程序:https://www.npmjs.com/package/msnodesql。虽然它与Microsoft SQL Server数据库的本机集成(比任何其他节点模块)都做得很好,但有几点需要注意。
“msnodesql”需要在主机上安装一些先决条件(如python,VC ++,SQL本机客户端等)。这使您的“节点”应用程序“Windows”依赖。如果您对基于“Windows”的部署没问题,那么使用“msnodesql”是最好的。
另一方面,还有另一个名为“mssql”的模块(此处为https://www.npmjs.com/package/mssql),可以根据配置使用“乏味”或“msnodesql”。虽然这个模块可能不如“msnodesql”那么全面,但它几乎解决了大部分需求。
如果您想从“mssql”开始,我遇到了一个简单直观的视频,其中解释了如何使用NodeJs连接到Microsoft SQL Server数据库:https://www.youtube.com/watch?v=MLcXfRH1YzE
上述视频的源代码可在此处找到:http://techcbt.com/Post/341/Node-js-basic-programming-tutorials-videos/how-to-connect-to-microsoft-sql-server-using-node-js
以防万一,如果以上链接不起作用,我在这里包含源代码:
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();
以上代码非常自我解释。我们定义db连接参数(在“dbConfig”JS对象中),然后使用“Connection”对象连接到SQL Server。为了执行“SELECT”语句,在这种情况下,它使用“Request”对象,该对象在内部与“Connection”对象一起使用。该代码解释了使用“promise”和“callback”执行的两种风格。
上面的源代码仅解释了连接到sql server数据库和执行SELECT查询。您可以通过以下网址获取“mssql”节点的文档,轻松将其提升到新的水平:https://www.npmjs.com/package/mssql
<强>更新强> 有一个新视频使用纯Node.js REST标准(使用Microsoft SQL Server)执行CRUD操作:https://www.youtube.com/watch?v=xT2AvjQ7q9E。这是一个非常棒的视频,从头开始解释一切(它已经有很多代码,并且在这里解释/复制整个代码并不令人满意)
答案 1 :(得分:13)
答案 2 :(得分:6)
我们刚刚发布了针对SQL Server连接的Node.JS预览驱动程序。你可以在这里找到它: Introducing the Microsoft Driver for Node.JS for SQL Server
驱动程序支持回调(这里,我们连接到本地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]);
}
});
});
或者,您可以使用事件(此处,我们将连接到SQL Azure a.k.a Windows Azure SQL数据库):
// 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); });
如果您遇到任何问题,请在Github上提出问题:https://github.com/windowsazure/node-sqlserver/issues
答案 3 :(得分:2)
npm上有一个名为mssqlhelper
您可以npm i mssqlhelper
连接和执行查询的示例:
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'));
}
}
);
您可以在此处详细了解:https://github.com/play175/mssqlhelper
:○)
答案 4 :(得分:0)
msnodesql对我很有帮助。这是一个示例:
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);
}
});
});
});
答案 5 :(得分:-2)
//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..');
});
//在数据库中创建一个表为emp(我创建为chat6)
// programs ends here
//将其另存为app.js并以节点app.js身份运行 //在浏览器中以localhost:5000
打开