node.js中的MemoryStore

node.js中的MemoryStore,node.js,express,Node.js,Express,我正在使用node.js实现社交网络应用程序,我使用的源代码是Mike Wilson的“使用MongoDB和主干”构建节点应用程序。但是,我不知道如何解决MemoryStore--var MemoryStore=require('connect')。session.MemoryStore; 此外,我试图对其进行注释,但出现了中间件错误 var Session=require('connect').middleware.Session.Session 我能得到你的帮助吗? 提前谢谢 下面是app.

我正在使用node.js实现社交网络应用程序,我使用的源代码是Mike Wilson的“使用MongoDB和主干”构建节点应用程序。但是,我不知道如何解决MemoryStore--var MemoryStore=require('connect')。session.MemoryStore; 此外,我试图对其进行注释,但出现了中间件错误 var Session=require('connect').middleware.Session.Session

我能得到你的帮助吗? 提前谢谢

下面是app.js的代码

var express = require('express');
var http = require('http');
var app = express();
var nodemailer = require('nodemailer');
var MemoryStore = require('connect').session.MemoryStore;
var dbPath = 'mongodb://10.168.122.123:27017/socialnet';
var fs = require('fs');
var events = require('events');

// Create an http server
app.server = http.createServer(app);

// Create an event dispatcher
var eventDispatcher = new events.EventEmitter();
app.addEventListener = function (eventName, callback) {
eventDispatcher.on(eventName, callback);
 };
app.removeEventListener = function (eventName, callback) {
eventDispatcher.removeListener(eventName, callback);
 };
app.triggerEvent = function (eventName, eventOptions) {
eventDispatcher.emit(eventName, eventOptions);
};

// Create a session store
app.sessionStore = new MemoryStore();

// Import the data layer
var mongoose = require('mongoose');
var config = {
mail: require('./config/mail')
 };

// Import the model
var models = {
Account: require('./models/Account')(app, config, mongoose, nodemailer)
 }

// Configure the application
app.configure(function(){
app.sessionSecret = 'SocialNet secret key';
app.set('view engine', 'jade');
app.use(express.static(__dirname + '/public'));
app.use(express.limit('1mb'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
    secret:     app.sessionSecret,
    key:        'express.sid',
    store:      app.sessionStore
}));
mongoose.connect(dbPath, function onMongooseError(err) {
    if (err) throw err;
});
});

 // Import the routes located in ./routes
fs.readdirSync('routes').forEach(function(file) {
if (file[0] == '.') return;
var routeName = file.substr(0, file.indexOf('.'));
require('./routes/' + routeName)(app, models);
});

// -----
// GET /
// -----
app.get('/', function(req, res){
res.render("index.jade", {layout: false});
 });

// -------------------
// POST /contacts/find
// -------------------
 app.post('/contacts/find', function(req, res) {
var searchStr = req.param('searchStr', null);

if (null == searchStr) {
    res.send(400);
    return;
}

models.Account.findByString(searchStr, function onSearchDone(err, accounts) {
    if (err || accounts.length == 0) {
        res.send(404);
    } else {
        // TODO: Check if these accounts were already contacts
        // if so, mark them as isContact so the views/Contact
        // knows not to add a addButton
        res.send(accounts);
    }
   });
  });

   // Let the server listen to 8000 (instead of the app)
   app.server.listen(8000);
   console.log('SocialNet listening to port 8000');
您的问题:

应用程序使用(应用程序路由器)

,将您的路线装载到呼叫链中的该位置。在会话中间件之前有它,所以还没有req.session。当你不使用它时,你的路线将在你第一次使用app.get(或app.post等)时定位。如果您仍希望控制路线的位置

你可以:


move app.use(app.router)位于会话中间件下方。

请添加您得到的确切错误。错误为:TypeError:无法读取未定义的var MemoryStore=require('connect')的属性'MemoryStore'。session.MemoryStore;^TypeError:无法读取未定义的at对象的属性“MemoryStore”。(/home/ec2 user/book node mongodb backbone/ch10/app.js:5:45)at Module.\u编译(Module.js:460:26)at Object.Module.\u扩展..js(Module.js:478:10)at Module.load(Module.js:355:32)at Function.Module.\u启动时加载(Module.js:310:12)at Function.runMain(Module.js:501:10)(node.js:124:16)它不应该是
require('connect').middleware.session.MemoryStore
?您使用的是
express
connect
的哪些版本?无论如何,
MemoryStore
是默认的会话存储,因此无需显式指定它。