Объявить сеанс с экспресс-узлом.js и мангустом

Делаю приложение с Node.js, Express, MongoDB (mongoose), пытаюсь сделать подключение к БД отдельным файлом от server.js, но у меня туго с коннект-монго.

Сначала в моем 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

Хорошо, внутри папки конфигурации у меня было два javascripts, которые обрабатывают подключение к базе данных, в учетных данных.js буквально были только учетные данные для доступа к базе данных.

Тогда моя проблема внутри db.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 })
   }));
}

Я получил следующую ошибку: Ошибка с nodemon server.js

Знаете ли вы, как запустить connect-mongo, используя эту структуру проекта?

Кстати, в файле учетных данных.js я устанавливаю Bluebird в качестве моей библиотеки промисов.

Заранее спасибо!


person Juan Carlos León    schedule 15.03.2017    source источник
comment
вызывается ли db.on('open'...)?   -  person Manan Vaghasiya    schedule 15.03.2017
comment
@MananVaghasiya Привет. Да, у меня действительно был console.log внутри, который сообщает мне, установлено ли соединение, поэтому я действительно не знаю, в чем проблема.   -  person Juan Carlos León    schedule 15.03.2017
comment
проблема определенно в том, что БД не является обещанием. Вы уверены, что mongoose.connection — это обещание?   -  person Manan Vaghasiya    schedule 16.03.2017
comment
@MananVaghasiya, вы были правы, это проблема с новой экспресс-версией, я изменил подход к простому соединению. с mongoose.connection(uri)   -  person Juan Carlos León    schedule 17.03.2017


Ответы (1)


Проблема заключалась в том, как сказал @MananVaghasiya, что моя переменная db не была промисом, это ошибка внутри проекта мангуста, поэтому я изменил тип соединения на базовое соединение 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;
       }
   });
};
person Juan Carlos León    schedule 17.03.2017