首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的Node.js本地应用程序不会连接到Azure

我的Node.js本地应用程序不会连接到Azure
EN

Stack Overflow用户
提问于 2017-02-10 13:43:41
回答 2查看 1.2K关注 0票数 0

我正在用Azure SQL DB ( MS的云版本)开发一个Node.js-Express-EJS web应用程序。

我尝试首先在远程Azure SQL DB上使用测试我的连接。首先,我将机器的IP设置为允许在Azure防火墙规则中使用。然后,我能够进入数据库,创建和填充表,并使用Management进行查询。

现在,我首先在本地使用Node.js应用程序。但是,它似乎无法使用相同的凭据连接到远程Azure SQL DB。

首先,我在节点-mssql中使用本教程:

代码语言:javascript
复制
/* Using node-mssql */
var sql = require('mssql');

router.get('/test/mssql', function(req, res, next) {

    console.log('Testing node-mssql')

    sql.connect("mssql://<username>:<password>@<server>.database.windows.net/<db>")
        .then(function() {

            new sql.Request()
                .query('SELECT * FROM mytable')
                .then(function(recordset) {
                    console.dir(recordset);
                }).catch(function(err) {
                    console.log(err);
                });


        }).catch(function(err) {
            console.log(err);
        });
});

我只能从控制台上得到

代码语言:javascript
复制
'Testing node-mssql'
GET /contact/test/mssql  - - ms - -

但是没有回应,它似乎永远在等待,它甚至没有抛出错误。

当我使用Sequelize.js时也会发生同样的事情

代码语言:javascript
复制
/* Using Sequelize.js */
var Sequelize = require('sequelize');

var sequelize = new Sequelize('<db>', '<username>', '<password>', {
  host: '<mydb>.database.windows.net',
  dialect: 'mssql',

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },

});

router.get('/test/sequelize', function(req, res, next) {

    console.log('Testing sequelize');

    sequelize.authenticate()
        .then(function(err) {
            console.log('Connection has been established successfully');
        })
        .catch(function(err) {
            console.log('Unable to connect to the database:', err);
        });
});

结果:

代码语言:javascript
复制
Testing sequelize
GET /test/sequelize - - ms - -

下面是我使用的版本:

代码语言:javascript
复制
Node.js - 4.6.0
express - 4.14.0
mssql - 3.3.0
sequelize - 3.30.2
tedious - 1.14.0

(我想知道这是否与我在WiFi上的连接有关?但不可能,bec。管理工作室工作正常,对吧?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-10 14:32:19

如果要用Azure SQL数据库进行测试,则需要将?encrypt=true添加到连接字符串中,如下所示:

代码语言:javascript
复制
mssql://<username>:<password>@<server>.database.windows.net/<db>?encrypt=true

对于Sequelize.js,您需要这个:dialectOptions: { encrypt: true }。代码将如下所示:

代码语言:javascript
复制
var sequelize = new Sequelize('<db>', '<username>', '<password>', {
  host: '<mydb>.database.windows.net',
  dialect: 'mssql',

  // Use this if you're on Windows Azure
  dialectOptions: { 
    encrypt: true 
  },

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },

});
票数 2
EN

Stack Overflow用户

发布于 2017-02-10 14:18:26

我认为问题在于连接字符串,因为这看起来不像一个能够工作的SQL数据库连接字符串。

对于mssql,请尝试像这样连接:

代码语言:javascript
复制
var config = {
 server: "<servername>.database.windows.net",
 database: "<dbname>",
 user: "<username>",
 password: "<password>",
 port: 1433,
 options: {
       encrypt: true
   }
};

sql.connect(config).then(function() { ... } )

FYI作为参考,SQL (至少通过.net)需要这样的连接字符串,因此您可能会成功地使用一个类似的连接字符串直接传递给sql.connect() (尽管我还没有尝试):

代码语言:javascript
复制
Server=tcp:[serverName].database.windows.net;Database=myDataBase;
User ID=[LoginForDb]@[serverName];Password=myPassword;Trusted_Connection=False;
Encrypt=True;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42160862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档