node.js开发指南 例子中存在的问题
2013-01-06 15:42 Lecone.JY.HU 阅读(722) 评论(0) 编辑 收藏 举报《node.js开发指南》下文简称书, 例子存在问题,多少是因为express版本升级问题,本文主要是列出学习过程中遇到的问题和解决办法。
本文所用express版本为3.0.6,
express官网: http://expressjs.com/api.html
express翻译:http://expressjs.jser.us/api.html
express中文论坛:http://cnodejs.org
1.Cannot read property 'connect.sid' of undefined
在文件 app.js
app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.session({ secret:settings.cookieSecret, store:new MongoStore({ db:settings.db }) }));
添加cookieParser,就可以解决问题
app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({ secret:settings.cookieSecret, store:new MongoStore({ db:settings.db }) }));
2.书,5.6.3页面注册,用 app.use(express.router(routes)) 代替 app.use(app.router):
app.configure(function (){ app.set('views', --dirname + '/views'); app.set('view engine', 'ejs'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({ secret: settings.cookieSecret, store: new MongoStore({ db: settings.db }) })); app.use(express.router(routes)); app.use(express. static (--dirname + '/public')); });
在本文express版本下一句删除了express.router这个方法。解决办法:将routes(app);加在后面。
app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({ secret:settings.cookieSecret, store:new MongoStore({ db:settings.db }) })); // app.use(app.router); // app.use(express.router(routes)); app.use(express.static(path.join(__dirname, 'public'))); routes(app); });
在这个例子中需要注意,app.js获取已经设置过设置项的操作在routes\index.js下设置,如书所写。