Ошибка закрытия соединения при вызове API nodejs в Azure - PullRequest
0 голосов
/ 09 октября 2019

У меня есть API отдыха nodejs, вызывающий мой предварительный SQL Server. Он размещен в Azure и подключен к моему SQL-серверу с помощью гибридного подключения Azure. На моем локальном компьютере все работает, как и ожидалось, но в Azure я получаю ошибку ConnectionClosed (ECONNCLOSED), когда пытаюсь вызвать тестовый маршрут ниже:

Вот мой пример кода:

var express = require('express');
var app = express();
var sql = require('mssql/msnodesqlv8');

// Connection string parameters.
var sqlConfig = {
    user: 'restapi', //remove if using Windows Auth
    password: 'restapi', //remove if using Windows Auth
    database: 'dbname',
    server: 'server\\instance',
    driver: 'msnodesqlv8',
    options: {
        encrypt: true
    }
}

var server = app.listen(process.env.PORT || 8081, function () {
    var host = server.address().address
    var port = server.address().port

    console.log("app listening at http://%s:%s", host, port)
});

app.get('/', function(req, res) {
    res.json({"message": "Welcome to the API"});
});

app.get('/Test', function (req, res) {
    sql.connect(sqlConfig, function() {
        var request = new sql.Request();
        request.query("select 1 as number")  //query
        .then(result => {
          let rows = result.recordset //first recordset
          res.setHeader('Access-Control-Allow-Origin', '*')
          res.status(200).json(rows);
          sql.close();
        }).catch(err => {
          console.log(err);
          res.status(500).send({
            message: err
          })
          sql.close();
        });
    })
});

Есть идеи?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Вот мой рабочий пример:

var express = require('express');
var app = express();
var sql = require('mssql');

var sqlConfig = {
    user: 'jack', 
    password: 'password',
    database: 'jackdemo',
    server: 'jackdemo.database.windows.net',
    options: {
        encrypt: true
    }
}

var server = app.listen(process.env.PORT || 8081, function () {
    var host = server.address().address
    var port = server.address().port

    console.log("app listening at http://%s:%s", host, port)
});

app.get('/', function(req, res) {
    res.json({"message": "Welcome to the API"});
});

app.get('/Test', function (req, res) {
    sql.connect(sqlConfig, function() {
        var request = new sql.Request();
        request.query("select 1 as number") 
        .then(result => {
          let rows = result.recordset //first recordset
          res.setHeader('Access-Control-Allow-Origin', '*')
          res.status(200).json(rows);
          sql.close();
        }).catch(err => {
          console.log(err);
          res.status(500).send({
            message: err
          })
          sql.close();
        });
    })
});

Вы также можете использовать подход из официального руководства: Используйте Node.js для запроса базы данных SQL Azure


Кстати, убедитесь, что вы правильно настроили правило брандмауэра для своего Azure SQL. Вам нужно добавить свой клиентский IP в список разрешенных как: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-firewall-configure#create-and-manage-ip-firewall-rules

0 голосов
/ 10 октября 2019

Хорошо, я исправил это, удалив имя драйвера и экземпляра из моего sqlConfig:

var sqlConfig = {
    user: 'restapi', //remove if using Windows Auth
    password: 'restapi', //remove if using Windows Auth
    database: 'dbname',
    server: 'server',
    options: {
        encrypt: true
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...