从node.js连接到AWS DocumentDB时遇到以下错误
连接错误:{[[MongoNetworkError:连接1至 docdb-2019-01-28-06-57-37.cluster-cqy6h2ypc0dj.us-east-1.docdb.amazonaws.com:27017 超时]名称:“ MongoNetworkError”,错误标签:[ 'TransientTransactionError']}
这是我的节点js文件
app.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://abhishek:abhishek@docdb-2019-01-28-06-57-37.cluster-cqy6h2ypc0dj.us-east-1.docdb.amazonaws.com:27017/?ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0', {
useNewUrlParser: true
});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("connected...");
});
答案 0 :(得分:6)
默认情况下,aws documentdb设计为仅从同一VPC连接。 因此,要从同一vpc中的ec2连接nodejs应用程序。您需要拥有pem文件,因为默认情况下在创建数据库实例时启用了SSL。
步骤1:wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
在所需目录中
第2步:使用指向pem文件的选项更改猫鼬连接
mongoose.connect(database.url, {
useNewUrlParser: true,
ssl: true,
sslValidate: false,
sslCA: fs.readFileSync('./rds-combined-ca-bundle.pem')})
.then(() => console.log('Connection to DB successful'))
.catch((err) => console.error(err,'Error'));
这里使用猫鼬5.4.0
要从VPC外部进行连接,请尝试遵循来自AWS的以下文档: https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-from-outside-a-vpc.html
我个人只是尝试通过VPC进行连接,并且工作正常。
更新=====:>
要通过VPC外部的Robo 3T连接,请点击链接- AWS DocumentDB with Robo 3T (Robomongo)
答案 1 :(得分:0)
有关更多信息,请访问:https://docs.mongodb.com/manual/core/transactions/#retry-transaction
async function runTransactionWithRetry(txnFunc, client, session) {
try {
await txnFunc(client, session);
} catch (error) {
console.log('Transaction aborted. Caught exception during transaction.');
// If transient error, retry the whole transaction
if (error.errorLabels && error.errorLabels.indexOf('TransientTransactionError') >= 0) {
console.log('TransientTransactionError, retrying transaction ...');
await runTransactionWithRetry(txnFunc, client, session);
} else {
throw error;
}
}
}
并首先检查您的网络连接,因为这是这里的优先事项。网络错误基本上表示“我在那里找不到任何东西”。通常是因为它无法从您尝试到达的地方到达。
并确保您的数据库连接已打开。