2017-03-15 7 views
1

Node.js、Express、MongoDB(mongoose)でアプリケーションを実行していますが、server.jsとは別のファイルにデータベース接続しようとしていますが、 connect-mongoで苦労している。express node.jsとmongooseとのセッションを宣言します

私はこれ持っていた私のserver.jsの最初の:これはアプリケーションのルートを扱う

/* jshint esversion: 6 */ 
'use strict'; 
let express = require('express'); 

const db = require('./app/config/db'); 
const routes = require('./app/routes/routes'); 
const users = require('./app/routes/users'); 

let app = express(); 

const conn = db.connect(); 

app.set('views', path.join(__dirname, 'app/views')); 
app.set('view engine', 'hbs'); 

... 

app.use('/', routes); 
app.use('/users', users); 

app.listen(3000); 

module.exports = app; 

を、およびアプリケーションサーバは、その後、私は私のプロジェクトのための次のフォルダ構造を持っていた:

myApp 
|___app 
    |___bin 
    |___config 
     |___credentials.js 
     |___db.js 
    |___controllers 
    |___routes 
    |___views 
|___node_modules 
|___package.json 
|___server.js 

Welll insidde config folderデータベースへの接続を処理する2つのjavascriptがありましたが、credentials.jsには文字通りデータベースアクセスのための資格がありました。私は次のエラーを得た

/* jshint esversion: 6 */ 
'use strict'; 
let mongoose = require('mongoose'), 
    async = require('async'), 
    express = require('express'); 

const credentials = require('./credentials'); 
const session = require('express-session'); 
const MongoStore = require('connect-mongo')(session); 

let db = mongoose.connection, 
    app = express(); 

exports.connect = function(done){ 
    const connection = mongoose.connect(credentials.host, credentials.database, credentials.port, credentials.db); 

    db.on('error', (error =>{ 
     console.log("Error estableciendo la conexion"); 
     process.exit(1); 
    })); 

    db.on('open', (argv)=>{ 
     db.db.listCollections().toArray((err, collections)=>{ 
      collections.forEach(x => console.log(x)); 
     }); 
    }); 

    /* Define sessions in MongoDB */ 
    app.use(session({ 
     secret: credentials.sessionSecret, 
     store: new MongoStore({ dbPromise: db }) 
    })); 
} 

:あなたは使用して接続-モンゴを開始する方法 Error with nodemon server.js

知っていますか

その後、私の問題はdb.js内にある、次の私はあなたのファイルを表示しますこのプロジェクトの構造ですか?

ところで、credentials.jsファイルで私は私の約束のライブラリとしてブルーバードを設定しました。

事前に感謝します!

+0

はdb.on( 'open' ...)と呼ばれていますか? –

+0

@MananVaghasiyaこんにちは。はい、私は実際に接続が確立されているかどうかを私に知らせるconsole.logを持っていました。だから問題は何か分かりません。 –

+0

問題は間違いなく "db"が約束されていません。あなたはmongoose.connectionが約束ですか? –

答えて

1

@MananVaghasiyaのように、私の変数dbはPromiseではありませんでした。これはmongooseプロジェクト内のバグですから、接続タイプをmongooseとの基本的なuri接続に変更してからログインセッションを設定しました。

現時点ではこのコードはこのようになっていますので、お時間をありがとうございます。

module.exports.login = (req, res)=>{ 
    const mail = req.body.mail.replace(/^\s\s*/, '').replace(/\s\s*$/, ''), 
      password = req.body.password; 

    user.findOne({$and:[{'mail' : mail}, {'password': password}]}, (err, user)=>{ 
     if(err){ 
      res.send(err); 
     } else { 
      /* Define sessions in MongoDB */ 
      app.use(session({ 
       secret: credentials.sessionSecret, 
       store: new MongoStore({ mongooseConnection: db }), 
       saveUnitialized: true, 
       resave: false, 
       cookie:{ 
        path: "/" 
       }, 
       name: user.role 
      })); 
      return user; 
     } 
    }); 
}; 
関連する問題