【问题标题】:Querying database through hybrid connection from an azure node js backend从 azure node js 后端通过混合连接查询数据库
【发布时间】:2017-01-03 01:56:03
【问题描述】:

我需要从基于 Nodejs 的 Azure 应用服务查询本地 SQL Server Express 数据库。我跟着this tutorial添加了一个混合连接。

我已成功连接并将此连接添加到我的服务中。我还将连接字符串添加为:

Server=LOCALHOST\\SQLEXPRESS,1433;Database=smartpointmovil_db;User ID=sa;Password=pass1009

然后,我在 node 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:undefined in 15000ms

我没有找到在我的代码中定义用于查询的连接字符串的方法,所以我将配置参数包括在内。

知道如何编写节点 js 代码来从 Azure 托管服务查询我的本地数据库吗?

【问题讨论】:

    标签: sql-server node.js azure


    【解决方案1】:

    在定义混合连接时使用本地服务器的主机名(计算机名)。然后使用相同的名称在您的应用服务代码中引用该机器。

    例如

    Server=SQL-SRV-01\SQLEXPRESS,1433; [...]
    

    混合连接通过挂钩getaddrinfo 系统调用来工作,它可能无法将您的LOCALHOST 与运行应用服务的VM 的实际LOCALHOST (127.0.0.1) 区分开来。

    使用来自Kudu Consolesqlcmd.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)
    

    【讨论】:

    • 我已经试过了。我将混合连接中的主机名从“LOCALHOST”更改为“quandojhv”,这是本地服务器中的计算机名。代码中的连接字符串和连接配置被“ ... server= 'quandojhv\\SQLEXPRESS', ... ”更改。我收到同样的错误:“应用程序:连接错误:ConnectionError:无法连接到 quandojhv:undefined in 15000ms”
    • 使用 sqlcmd.exe 和 nameresolver.exe 进行测试,两者都在 Kudu 控制台中可用。
    • 哦,请确保您的 SQL 实例侦听的范围比 127.0.0.1 更广,因为 HCM 将从 NIC 的私有 IP 地址获取数据包(例如,如果您的服务器是 10.1.1.1,那么流程就像10.1.1.1:random_port -> 10.1.1.1:1433)
    • NAMERESOLVER quandojhv - 解析为:地址:127.0.0.101; SQLCMD 失败并出现以下错误:“与 SQL Server 建立连接时发生网络相关或特定于实例的错误。找不到或无法访问服务器”
    • SQL SERVER 实例正在侦听端口 1433 上的所有 IP 地址
    【解决方案2】:

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

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

    我的代码中的新配置参数是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2016-09-20
      • 2018-09-06
      相关资源
      最近更新 更多