连接到Azure CosmosDB

时间:2017-10-02 20:22:56

标签: mongoose azure-cosmosdb

我正在尝试连接到CosmosDB,我使用Quick Start中的连接字符串, 它在我的本地主机上工作正常但是一旦部署我得到

{
name: "MongoError",
message: "Database account is not found"
}

var express = require('express'),
mongoose = require('mongoose');
mongoUri = "mongodb://dbaccount:pass@dbhost:port/dbNAME?ssl=true';
options = {
"useMongoClient":true,
"promiseLibrary": global.Promise,
"ssl": true
}
mongoose.Promise = global.Promise;

var db = mongoose.connect(mongoUri,options)

我检查了连接字符串。我可以在我的localhost上连接,也可以使用Robo 3T连接到db。

2 个答案:

答案 0 :(得分:3)

TL; DR:将您在Azure上的Web应用程序中的IP添加到数据库上防火墙上的IP访问控制列表中。

enter image description here

我有完全相同的问题,我可以在本地和Robo 3T连接,但是一旦我在Azure上部署应用程序,我收到了这个错误:

MongoError: Database account is not found
at Function.MongoError.create (D:\home\site\wwwroot\node_modules\mongodb-core\lib\error.js:31:11)
at D:\home\site\wwwroot\node_modules\mongodb-core\lib\connection\pool.js:497:72
at authenticateStragglers (D:\home\site\wwwroot\node_modules\mongodb-core\lib\connection\pool.js:443:16)
at Connection.messageHandler (D:\home\site\wwwroot\node_modules\mongodb-core\lib\connection\pool.js:477:5)
at TLSSocket.<anonymous> (D:\home\site\wwwroot\node_modules\mongodb-core\lib\connection\connection.js:331:22)
at emitOne (events.js:116:13)
at TLSSocket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at TLSSocket.Readable.push (_stream_readable.js:208:10)
at TLSWrap.onread (net.js:594:20)

因此,机会很高,Azure上的防火墙设置错误。

对我来说,我在Azure上的数据库上禁用了我的IP访问控制,错误消失了,所有内容都按预期工作。我重新启用了IP访问控制,并从Web应用程序添加了IP,以允许访问。这应该够了吧。 我认为您可以从本地主机访问,因为您的本地IP已被添加为默认用于开发目的。

有关详细信息,请参阅此Microsoft Doc: https://docs.microsoft.com/en-us/azure/cosmos-db/firewall-support

答案 1 :(得分:0)

我遇到了同样的问题。在您的Azure Cosmos数据库中,您只需启用以下功能即可:

enter image description here

这将允许其他Azure资源(例如Web应用程序)访问您的数据库。