質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

997閲覧

herokuへデプロイ時にmongoDBに接続できない

paccuman

総合スコア13

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/05/11 05:05

編集2020/05/11 05:08

herokuへデプロイしたとき、DBに接続されません。。
以下エラーについて何が原因かわかりますでしょうか?

エラーログ

errorlog

1MongooseError [MongooseServerSelectionError]: connect ECONNREFUSED 127.0.0.1:27017 2 3at new MongooseServerSelectionError (/app/node_modules/mongoose/lib/error/serverSelection.js:24:11) 4at NativeConnection.Connection.openUri (/app/node_modules/mongoose/lib/connection.js:823:32) 5at Mongoose.connect (/app/node_modules/mongoose/lib/index.js:333:15) 6at Object.<anonymous> (/app/main.js:38:10) 7at Module._compile (internal/modules/cjs/loader.js:1133:30) 8at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10) 9at Module.load (internal/modules/cjs/loader.js:977:32) 10at Function.Module._load (internal/modules/cjs/loader.js:877:14) 11at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) 12at internal/main/run_main_module.js:18:47 { 13reason: TopologyDescription { 14type: 'Single', 15setName: null, 16maxSetVersion: null, 17maxElectionId: null, 18servers: Map { 'localhost:27017' => [ServerDescription] }, 19stale: false, 20compatible: true, 21compatibilityError: null, 22logicalSessionTimeoutMinutes: null, 23heartbeatFrequencyMS: 10000, 24localThresholdMS: 15, 25commonWireVersion: null 26}, 27[Symbol(mongoErrorContextSymbol)]: {} 28} 29 302020-05-11T04:24:22.264630+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/contact" host=glacial-temple-91497.herokuapp.com request_id=47cc1b63-36ca-4130-a743-af0f69df82b8 fwd="106.159.27.203" dyno=web.1 connect=1ms service=30001ms status=503 bytes=0 protocol=https 31MongooseError [MongooseServerSelectionError]: connect ECONNREFUSED 127.0.0.1:27017

サーバー接続情報

javascript

1const 2 port = 3000, 3 express = require("express"), 4 app = express(), 5 router = express.Router(), 6 cookieParser = require('cookie-parser'), 7 expressSession = require('express-session'), 8 dotenv = require('dotenv'), 9 ; 10 11dotenv.config(); 12 13 14//【db】 15const mongoose = require("mongoose"); 16mongoose.Promise = global.Promise; 17mongoose.connect( 18 process.env.MONGODB_URI || "mongodb://localhost:27017/hoge_db", 19 { useNewUrlParser: true, useUnifiedTopology: true }, 20 error => 21 { 22 if (error) 23 { 24 console.log(error); 25 } else 26 { 27 console.log("cannot conect DB") 28 } 29 }); 30 31const db = mongoose.connection; 32db.once("open", () => { console.log("MongoDBに接続完了") }); 33 34 35app.use("/", router); 36 37//cookie,Session,flash 38router.use(cookieParser("secret_passcode")); 39router.use(expressSession({ 40 secret: "secret_passcode", 41 cookie: { 42 maxAge: 4000000 43 }, 44 resave: false, 45 saveUninitialized: false 46})); 47 48router.use(passport.initialize()); 49router.use(passport.session()); 50 51 52 53 54app.set("port", process.env.PORT || 3000); 55const server = app.listen(app.get("port"), () => 56{ 57 console.log(`Saever running at http://localhost:${app.get("port")}`) 58});

環境とバージョン

node.js,mongoDB

package.json

1{ 2 "name": "recipe", 3 "version": "1.0.0", 4 "description": hoge.com", 5 "main": "main.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1", 8 "start": "node main.js" 9 }, 10 "author": "name", 11 "license": "ISC", 12 "dependencies": { 13 "body-parser": "^1.19.0", 14 "connect-flash": "^0.1.1", 15 "cookie-parser": "^1.4.5", 16 "dotenv": "^8.2.0", 17 "ejs": "^3.1.2", 18 "express": "^4.17.1", 19 "express-partials": "^0.3.0", 20 "express-session": "^1.17.1", 21 "express-validator": "^6.4.1", 22 "http-status-codes": "^1.4.0", 23 "method-override": "^3.0.0", 24 "mongodb": "^3.5.7", 25 "mongoose": "^5.9.12", 26 "passport": "^0.4.1", 27 "passport-local-mongoose": "^6.0.1" 28 } 29} 30

試したこと

以下記事を見てdotenvをインストールし、設定したが解消されませんでした。
https://teratail.com/questions/225516

※もし、.envが不要であれば無視していただいて結構です。

//.envファイルの記述 MONGODB_URI=mongodb://localhost:27017/hoge_db

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コードを見たところ、ローカルのmongoDBに接続しようとしているようですが、
heroku上のmongoDBを利用したいなら、アドオンを導入する必要があります。
mLab MongoDB の sandbox でしたら、制限はあるものの無料で利用できますので、
以下の公式ページを参考に導入を進めてみてください。
mLab MongoDB - Add-ons - Heroku Elements

投稿2020/05/11 11:42

snogot

総合スコア134

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

paccuman

2020/05/11 14:20

ありがとうございます! 無事DBに接続できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問