我需要从基于Nodejs的Azure应用服务查询本地SQL Server Express数据库。我跟着this tutorial添加了混合连接。
我已成功连接并将此连接添加到我的服务中。我还将连接字符串添加为:
Server=LOCALHOST\\SQLEXPRESS,1433;Database=smartpointmovil_db;User ID=sa;Password=pass1009
然后,我在节点JS中为我的azure移动应用程序服务编写了一个简单的api:
"get": function (req, res, next) {
var sql = require("mssql");
var config = {
server: 'LOCALHOST\\SQLEXPRESS',
user: 'sa',
password: 'pass1009',
database: 'smartpointmovil_db',
port: 1433
};
var conn = new sql.Connection(config);
var req=new sql.Request(conn);
conn.connect(function(err){
if(err){
console.log("Error connectig: "+err);
return;
}
req.query('select * from smartpointmovil.cat_cadenas where id=1',function(err,results){
if(err){
console.log("Error during query: "+err);
return;
}
else{
console.log("Success: "+results[0].cadena);
res.json(results[0]);
}
conn.close();
});
});
}
每次调用此API时,都会收到以下错误消息:
错误连接:ConnectionError:连接失败 LOCALHOST:在15000ms内未定义
我没有找到在我的代码中定义用于查询的连接字符串的方法,所以我包含了配置参数。
知道如何编写节点js代码以从Azure托管服务查询我的本地数据库吗?
答案 0 :(得分:0)
定义混合连接时,使用本地服务器的主机名(计算机名称)。然后使用相同的名称在App Service代码中引用该计算机。
e.g。
Server=SQL-SRV-01\SQLEXPRESS,1433; [...]
混合连接通过挂钩getaddrinfo
系统调用来工作,它可能无法将LOCALHOST
与App Service运行的VM的实际LOCALHOST (127.0.0.1)
区分开来顶部。
使用Kudu Console中的sqlcmd.exe
进行测试:
D:\home>sqlcmd -S tcp:SQL-SRV-01,1433 -U {username} -P {password}
-Q "SELECT NAME FROM sys.sysdatabases"
NAME
-------------------
master
MobileServiceZZZ_db
(2 rows affected)
答案 1 :(得分:0)
我得到了它,这些是我在我的代码中所做的更改,以使其工作:
我的代码中的新配置参数是:
var config = {
server: 'quandojhv',
user: 'sa',
password: 'pass1009',
database: 'smartpointmovil_db',
options: {
encrypt: true
}};