Node.js проблема подключения базы данных connect-mongo - PullRequest
2 голосов
/ 09 июля 2011

Это очень странная проблема с «connect-mongo»

На моем сервере у меня есть два сценария.

1) создать экспресс-сервер с сеансом с Mongo DataStore:нет проблем для подключения или создания сеанса.

MongoStore = require('connect-mongo'),
app = require('express').createServer(


  express.session({ secret: cfg.wiki_session_secret,
    store:new MongoStore({  
          db: 'mydatabase',
      host: '10.10.10.10',
      port: 27017
    })
  })
);

2) просто создайте магазин без экспресса:

var MongoStore = require('connect-mongo');

var options = {db: 'mydatabase'}; 
var store = new MongoStore(options, function() {
    var db = new mongo.Db(options.db, new mongo.Server('10.10.10.10', 27017, {}));

    db.open(function(err) {
      db.collection('sessions', function(err, collection) {
        callback(store, db, collection);
      });
    });
  });  

Это вызовет проблему с подключением:

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
Error: Error connecting to database
    at /home/eauser/node_modules/connect-mongo/lib/connect-mongo.js:106:13
    at /home/eauser/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:79:30
    at [object Object].<anonymous> (/home/eauser/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connections/server.js:113:12)
    at [object Object].emit (events.js:64:17)
    at Array.<anonymous> (/home/eauser/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection.js:166:14)
    at EventEmitter._tickCallback (node.js:126:26)

Я просто не знаю почему..

Ответы [ 3 ]

1 голос
/ 10 августа 2011

connect-mongo - это промежуточное программное обеспечение для инфраструктуры соединений, основанное на экспрессе.

Таким образом, вы должны использовать промежуточное программное обеспечение с платформой Express или платформой соединения, иначе оно не будет работать. Она не написана как отдельная библиотека сессий.

0 голосов
/ 11 февраля 2014

У этого модуля есть обратный вызов в конструкторе, который вызывается при подключении базы данных, и коллекция инициализируется, поэтому она не будет работать так, как вы ожидаете.хотел тот же интерфейс, который вы нацеливаете сюда.Поэтому я написал еще один модуль под названием YAMS - еще один магазин Mongo .Вот пример с YAMS:

var MongoClient = require("mongodb").MongoClient;
var Yams = require('yams');

var store = new Yams(function (done) {
  //this will be called once, you must return the collection sessions.
  MongoClient.connect('mongo://localhost/myapp', function (err, db) {
    if (err) return done(err);

    var sessionsCollection = db.collection('sessions')

    //use TTL in mongodb, the document will be automatically expired when the session ends.
    sessionsCollection.ensureIndex({expires:1}, {expireAfterSeconds: 0}, function(){});

    done(null, sessionsCollection);
  });  
});

app.usage(express.session({
  secret: 'black whisky boycott tango 2013',
  store:  store
}));

На мой взгляд, он более гибкий, чем промежуточное программное обеспечение connect-mongo.

0 голосов
/ 29 декабря 2013

Вы можете пойти на мангуст для подключения.Установка с помощью команды npm

npm install mongoose

Глобальная установка mongoose

npm install -g mongoose    

app.js

var mongoose = require("mongoose");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...