代码改变世界

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下设置,如书所写。

的风格风格