やあ子供たち、おじさんはかつてmongodb driver の 4.2.2というバージョン(←"npm list"で確認できるよ)を使って、以下のようなコードを使っていたよ。まあこれで何の問題もなく動いていたものさ。
var g_db=null; { let connection_string = "mongodb://127.0.0.1:27017"; MongoClient.connect(connection_string, (err, client) => { if(err){console.log("mongodb connect error.");return;} console.log("Connected successfully to server"); g_db = client.db("English"); server.listen( settings.port, g_local_ip, ()=>{ console.log("app listening.. "); }); }); }
まあそのような古いドライバーを秘伝のタレ状態で使いまわしていたおじさんの方にも問題はあったと思う。
そう、このたびmongodb driverを6.5.0にしてみて、上記のコードを使いまわそうとしたら、errも返さないし、上のコード中で表示させているはずの"Connected successfully to server" も何も表示されなくなってしまった。困るよねえ。。
で、こんなの調べようがないじゃん?ていうか何が原因なのかもわからんじゃん?
でまあ今まで使ってきたmongoドライバーのバージョンが古いことに気づくのにどれだけかかったことか。そこに辿り着くまでに。。
npm list でバージョン調べたり、
npm i mongodb@4.2 とかやってダウングレードしたら、、動きましたがなっ!!
で、GPT様に以下の質問ですよ「code below works for mongodb driver version 4.2 but not for 6.5 why」そうすると、ああ、connect()の仕様が変わったんだよってGPT様が教えてくれるからそっからはもうホントに助かったんだけどそれまでは「code below does not succeed」とか聞いてもさ、もしかしてドライバーのバージョンがとか教えてくれないわけよ。もうホント苦労したわ気づくまで。つっても2時間くらいだけどさ。ほんとにもう。
ちなみに新しいconnect()の仕様に即したコードは以下のような感じだ。
// Create a new MongoClient let g_db =null; const client = new MongoClient("mongodb://127.0.0.1:27017"); async function mongo_connect() { try { // Connect the client to the server await client.connect(); console.log("Connected successfully to server"); g_db = client.db("English"); // Start your server here server.listen(settings.port, g_local_ip, () => { console.log("app listening.. "); }); } catch (err) { console.log("mongodb connect error:", err); } } mongo_connect();
やー本当になんつーかね。秘伝のタレ方式ってある意味便利なんだけど、ずっと使いまわしているとホント危険だよなみたいな例でしたと。最後に整理してみよう。
・秘伝のタレ方式で使いまわしてきたもの
・mongodb nodejs driver 4.2
・4.2に即したconnect()文を使った接続コード
・今回新しくして動かなくなった組み合わせ
・mongodb nodejs driver 6.5.0
・4.2に即したconnect()文を使った接続コード ←connect()の仕様が古いままだった。
それだけなのか?って、で思うわけなんだけど、
まこういう、breaking changesの情報だとかあるけど、載ってないし!(●リンク)まあ、宛にならんよなー。結局一番いいのは小まめにアップすることなんだろうな。あくまで理想としてはの話だが。。
え、mongodbのバージョン?5.0.26だよ。
はい今日はそんなところで。チャオ!