node.js - 在 Azure 上调用 nodejs API 的连接关闭错误
问题描述
我有一个 nodejs Rest API 调用我的本地 SQL Server。它托管在 Azure 上,并使用 Azure 混合连接连接到我的 SQL 服务器。一切都在我的本地机器上按预期运行,但在 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();
});
})
});
有任何想法吗?
解决方案
这是我的可行样本:
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();
});
})
});
也可以使用官方教程中的方法:Use Node.js to query an Azure SQL database
顺便说一句,请确保您已为您的 Azure SQL 正确配置防火墙规则。您需要将您的客户端 IP 添加到允许列表中:https ://docs.microsoft.com/en-us/azure/sql-database/sql-database-firewall-configure#create-and-manage-ip-firewall -规则
推荐阅读
- python - 为什么此输出列表在此代码中不起作用?
- createjs - 第一次播放后音效延迟
- linux - 您如何解决“构建失败:未指定 Android SDK 目录,正在退出。”
- javascript - Quickblox 膨胀的 webpack 包
- android - Zxing Android - 不扫描 pdf417
- sql - 带有 Sequelize Cast 的 uuid v4 类型列上的 ILIKE 运算符
- java - Override equals on a cglib proxy
- android - 如何在 Firebase 通知中停止铃声管理器正在播放但不停止
- python - 使用 GridSearchCV 但不使用 GridSearchCV 时出错 - Python 3.6.7
- python-3.x - 如何收集光束变换的所有结果?