node.js中的MemoryStore
我正在使用node.js实现社交网络应用程序,我使用的源代码是Mike Wilson的“使用MongoDB和主干”构建节点应用程序。但是,我不知道如何解决MemoryStore--var MemoryStore=require('connect')。session.MemoryStore; 此外,我试图对其进行注释,但出现了中间件错误 var Session=require('connect').middleware.Session.Session 我能得到你的帮助吗? 提前谢谢 下面是app.js的代码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.
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
是默认的会话存储,因此无需显式指定它。