くすりぃのブログ

エンジニアになりたい情報系学生

mongooseでmondo atlasに接続する際のエラー:EREFUSED

MongoDBを操作するためのnpmモジュールであるmongooseを用いてmongo atlasに接続しようと試みた.

const mongoose = require("mongoose");
dbUrl= "mongodb+srv://<username>:<password>@cluster0.th6mh4o.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0"

mongoose.connect(dbUrl, { useNewUrlParser: true })
    .then(() => {
        console.log('MongoDBコネクションOK!!');
    })
    .catch(err => {
        console.log("MongoDBコネクションエラー!!!'");
        console.log(err);
    });

*1

するとこんなエラーが...

MongoDBコネクションエラー!!!'
Error: querySrv EREFUSED _mongodb._tcp.cluster0.th6mh4o.mongodb.net
    at QueryReqWrap.onresolve [as oncomplete] (node:internal/dns/promises:275:17) {
  errno: undefined,
  code: 'EREFUSED',
  syscall: 'querySrv',
  hostname: '_mongodb._tcp.cluster0.th6mh4o.mongodb.net'
}

ググると,stackoverflowに同じ問題を持つ方が!

stackoverflow.com

回答によると,接続文字列(このコード内でのdbUrl)をmongo atlasからコピーしてくる際に,「Node.js 2.2.12 以降の古いもの」をコピーしてくるようにとのこと.

mondodb atlasのconect画面
この文字列にすると接続できた. MongoDB によると、Mongoose が原因で SRV が機能していない可能性があるそう.

*1:実装の際はdbUrlの値は.envファイルに入れています.,はそれぞれmongo atlasのプロジェクトで作成したユーザーネームとパスワードを入力しています.