通过来自azure节点js后端的混合连接查询数据库

时间:2016-12-29 17:26:11

标签: sql-server node.js azure

我需要从基于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托管服务查询我的本地数据库吗?

2 个答案:

答案 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)

我得到了它,这些是我在我的代码中所做的更改,以使其工作:

  1. 从服务器名称“LOCALHOST”更改为我的服务器主机名:'quandojhv',与混合连接中的主机名相同。
  2. 我在服务器配置参数中删除了实例名称'\ SQLEXPRESS'。
  3. 我的代码中的新配置参数是:

    var config = {
    server: 'quandojhv',
    user: 'sa',
    password: 'pass1009',       
    database: 'smartpointmovil_db',
     options: {
        encrypt: true 
    }};