問題が解決する可能性があると思う
免責事項: HerokuもMongoDBAtlasも使用していませんが、調査中です。
私が見つけたGithubの問題によると、MongoDB AtlasでサーバーのIPアドレスをホワイトリストに登録していない場合は、そのエラーメッセージが表示されます。
MongoDB Atlasのドキュメントを読んで、Heroku dynosと組み合わせてこれを行う唯一の方法は、0.0.0.0/0
を追加することです。 (つまり、すべてのアドレス)をMongoDBAtlasホワイトリストに追加します。
試してみて、接続をインスタンス化できるかどうかを報告してください。
SSLの場合
SSLの質問に答えようとしていますが、完全にはわかりませんが、私が読んだ内容に基づいて、HerokuでSSLを有効にする必要はないと思います。
MongoDBサーバーが証明書の検証を実行した場合、それに接続するためのNode.jsコードは次のようになります(Node.jsドライバーのドキュメントから取得):
var MongoClient = require('mongodb').MongoClient,
f = require('util').format,
fs = require('fs');
// Read the certificates
var ca = [fs.readFileSync(__dirname + "/ssl/ca.pem")];
var cert = fs.readFileSync(__dirname + "/ssl/client.pem");
var key = fs.readFileSync(__dirname + "/ssl/client.pem");
// Connect validating the returned certificates from the server
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", {
server: {
sslValidate:true
, sslCA:ca
, sslKey:key
, sslCert:cert
, sslPass:'10gen'
}
}, function(err, db) {
db.close();
});
MongoDBサーバーがSSL証明書をチェックしない場合は、次のようなコードを使用できます(これもNode.jsドライバーのドキュメントから取得)。
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:27017/test?ssl=true", function(err, db) {
db.close();
});
AtlasのドキュメントにNode.jsから接続するための次のサンプルコードが含まれていることを考えると、しないと思います。 HerokuでSSLを有効にする必要があります:
var MongoClient = require('mongodb').MongoClient;
var uri = "mongodb://kay:[email protected]:27017,mycluster0-shard-00-01-wpeiv.mongodb.net:27017,mycluster0-shard-00-02-wpeiv.mongodb.net:27017/admin?ssl=true&replicaSet=Mycluster0-shard-0&authSource=admin";
MongoClient.connect(uri, function(err, db) {
db.close();
});