从NodeJS中的Azure功能访问SQL数据库

时间:2016-09-08 15:36:33

标签: node.js azure azure-sql-database azure-functions

我尝试创建一个由http请求触发的Azure函数,然后从SQL数据库中选择数据,然后返回数据。

我尝试按照以下示例设置一个简单连接到数据库的基本示例:https://msdn.microsoft.com/library/mt715784.aspx 它不是Azure功能特定的,但我认为它应该运行:

var Connection = require('tedious').Connection;  
var config = {  
    userName: 'userName',  
    password: 'password',  
    server: 'databaseServer.database.windows.net',  
    options: {encrypt: true, database: 'AdventureWorks'}  
};  

module.exports = function(context, req, saasSql) {

    var connection = new Connection(config);  
    connection.on('connect', function(err) {  
        if(err) {
            context.log(err);
        } else {
            context.log("Connected");  

            context.res = {
                body: 'Connected'
            };
            context.done();
        }
    });  
};

然而,当它运行时(在管理控制台中触发)。我收到一条日志消息,说该函数已启动,然后在日志中没有其他内容。底部的“输出”窗口显示状态:502 Bad Gateway和此消息: 为功能应用启用了身份验证。在运行该功能之前禁用身份验证。

我想这是因为我没有调用context.done(),因为此功能的身份验证已关闭。我似乎无法弄清楚如何从连接尝试中获取任何错误信息等,我也试图绑定到错误事件,但没有任何事情被解雇。

更新

错误消息是Azure Functions代码中的错误,并显示错误的错误。但是,上面的代码仍然没有运行(并且没有抛出错误)。当我创建本地节点服务器并以这种方式运行时,它运行正常,因此在Azure Functions框架中运行似乎是一个问题。有没有办法从Azure功能连接到SQL DB?

1 个答案:

答案 0 :(得分:0)

错误消息"Authentication is enabled for the function app. Disable authentication before running the function."表示您已启用功能应用的Authentication / Authorization feature。这将阻止门户网站调用您的Http函数,因为需要进行身份验证。请注意,此身份验证与您在功能门户中配置的功能级别身份验证不同。

因此,目前唯一可行的方法是让您按照错误消息执行操作 - 禁用功能应用程序级别身份验证。我们的仓库中有一个跟踪项目可以改善这一点(issue here)。