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

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

ただいまの
回答率

88.80%

Webアプリケーション(投稿フォーム)を作成するために、MongoDBからデータを取得したいのですが、できません

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,337

Miwa_Ichihana

score 11

 前提・実現したいこと

Webアプリケーション(投稿フォーム)を作成するために、MongoDBからデータを取得したいのですが、できません

※使用OS:MacOS

 発生している問題・エラーメッセージ

ターミナルで、node app.js と入力したところ、以下のエラーメッセージが表示されました

body-parser deprecated bodyParser: use individual json/urlencoded middlewares app.js:34:9
body-parser deprecated undefined extended: provide extended option node_modules/body-parser/index.js:105:29
{ MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/topologies/server.js:503:11)
    at Pool.emit (events.js:160:13)
    at Connection.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/connection/pool.js:326:12)
    at Object.onceWrapper (events.js:255:19)
    at Connection.emit (events.js:160:13)
    at Socket.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:255:19)
    at Socket.emit (events.js:160:13)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at process._tickCallback (internal/process/next_tick.js:152:19)
  name: 'MongoNetworkError',
  message: 'failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]' }
(node:12546) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/topologies/server.js:503:11)
    at Pool.emit (events.js:160:13)
    at Connection.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/connection/pool.js:326:12)
    at Object.onceWrapper (events.js:255:19)
    at Connection.emit (events.js:160:13)
    at Socket.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:255:19)
    at Socket.emit (events.js:160:13)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at process._tickCallback (internal/process/next_tick.js:152:19)
(node:12546) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:12546) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

2018.3.7
いただいた回答の通り、mongodコマンドを入力してみましたが、未だ解決できず...

1.mongod入力

2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten] MongoDB starting : pid=663 port=27017 dbpath=/data/db 64-bit host=ICHIHANAMBA.local
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten] db version v3.6.2
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten] git version: 489d177dbd0f0420a8ca04d39fd78d0a2c539420
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2n  7 Dec 2017
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten] allocator: system
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten] modules: none
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten] build environment:
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten]     distarch: x86_64
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten]     target_arch: x86_64
2018-03-07T04:55:34.304+0900 I CONTROL  [initandlisten] options: {}
2018-03-07T04:55:34.307+0900 I STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating
2018-03-07T04:55:34.307+0900 I CONTROL  [initandlisten] now exiting
2018-03-07T04:55:34.307+0900 I CONTROL  [initandlisten] shutting down with code:100

2.touch app.js、node app.jsコマンド入力

body-parser deprecated bodyParser: use individual json/urlencoded middlewares app.js:34:9
body-parser deprecated undefined extended: provide extended option node_modules/body-parser/index.js:105:29
{ MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/topologies/server.js:503:11)
    at Pool.emit (events.js:160:13)
    at Connection.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/connection/pool.js:326:12)
    at Object.onceWrapper (events.js:255:19)
    at Connection.emit (events.js:160:13)
    at Socket.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:255:19)
    at Socket.emit (events.js:160:13)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at process._tickCallback (internal/process/next_tick.js:152:19)
  name: 'MongoNetworkError',
  message: 'failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]' }
(node:666) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/topologies/server.js:503:11)
    at Pool.emit (events.js:160:13)
    at Connection.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/connection/pool.js:326:12)
    at Object.onceWrapper (events.js:255:19)
    at Connection.emit (events.js:160:13)
    at Socket.<anonymous> (/Users/miwaichihana/hoge/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:255:19)
    at Socket.emit (events.js:160:13)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at process._tickCallback (internal/process/next_tick.js:152:19)
(node:666) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:666) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

 該当のソースコード

■app.jsファイル

"use strict";

var http = require('http');

var express = require('express');

var path = require('path');

var bodyparser = require('body-parser');

var mongoose = require('mongoose');

var Message = require('./schema/Message');

var app = express();

mongoose.connect('mongodb://localhost:27017/chatapp', function(err){

  if(err){

    console.error(err);

  }else{

    console.log("successfully connected to MongoDB.");

  }
});

app.use(bodyparser())

app.set('views', path.join(__dirname, 'views'));

app.set('view engine', 'pug');

app.get("/", function(req, res, next){

  Message.find({}, function(err, msgs){

    if(err) throw err;

    return res.render('index', {messages : msgs});

  });

});

app.get("/update", function(req, res, next){

  return res.render('update');

});

app.post("/update", function(req, res, next){

  var newMessage = new Message({

    username : req.body.username,
    message : req.body.message

  });

  newMessage.save((err) => {

    if(err)throw err;
    return res.redirect("/");

  });
});

var server = http.createServer(app);

server.listen('3000');

■schemaフォルダ > Message.jsファイル

var mongoose = require('mongoose');

var Message = mongoose.Schema({

  username : String,
  message : String,
  date : {type : Date, default : new Date()}

});

module.exports = mongoose.model('Message', Message)

■viewsフォルダ > index.pugファイル

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <h1>投稿一覧</h1>
        <section>
            each msg in messages
                <div>
                    <h2>#{msg.username}</h2>
                    <time>#{msg.date}</time>
                    <p>#{msg.message}</p>
                </div>
        </section>
    </body>
</html>

■viewsフォルダ > update.pugファイル

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <h1>メッセージを保存</h1>
    <form action="update" method="POST">
      <input type="text" name="username" placeholder="名前">
      <textarea placeholder="メッセージ" name="message"></textarea>
      <button type="submit">送信</button>
    </form>
  </body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]


mongo database自体を起動していないのではないでしょうか?

mongodでmongo databaseは起動しましたか?

 更新 - 20180307 - 17:28

2018-03-07T04:55:34.307+0900 I STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating

mongoDBがデータを保存する場所が未作成のようです。

デフォルトでは保存先は/data/dbなので、とりあえず保存先を以下のようなかたちで作成する必要があります。

sudo mkdir -p /data/db

その後、作成したディレクトリに書き込み権限を与える必要があるので、以下を実行します。

whoami
whoamiの結果


whoamiのところにはユーザー名が表示されます。

sudo chown -Rv whoamiの結果 /data/db


whoamiで表示されたユーザーに書き込み権限を与える

とりあえず上記試してみて下さい。それでもエラーがある場合はまた他の対応がひつようになってくるとおもいます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/07 05:24

    ご回答ありがとうございます!
    また、返信が遅くなり大変申し訳ありませんでした。
    mongodコマンドを入力してみましたが、解決には至らず...でした。

    2018.3.7「発生している問題・エラーメッセージ」欄に追記しました。
    また、ご回答・アドバイスなどいただければ幸いです。

    キャンセル

  • 2018/03/09 07:18

    教えていただいたコマンドを入力することで解決できました!
    ありがとうございます!
    また、機会があればよろしくお願いいたします!

    キャンセル

  • 2018/03/09 13:50

    お、よかったです!

    キャンセル

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

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • JavaScriptに関する質問
  • Webアプリケーション(投稿フォーム)を作成するために、MongoDBからデータを取得したいのですが、できません