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); });
するとこんなエラーが...
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に同じ問題を持つ方が!
回答によると,接続文字列(このコード内でのdbUrl)をmongo atlasからコピーしてくる際に,「Node.js 2.2.12 以降の古いもの」をコピーしてくるようにとのこと. この文字列にすると接続できた. MongoDB によると、Mongoose が原因で SRV が機能していない可能性があるそう.
*1:実装の際はdbUrlの値は.envファイルに入れています.