1

我正在尝试调试我的应用程序,并且在这样做时我意识到我并不完全理解 HTTP GET 请求如何找到它的路径。换句话说,当我们像这样配置中间件时:

app.configure(function(){
  // options
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  // middleware
  app.use(express.favicon());
  app.use(express.logger('dev'));

  app.use(express.cookieParser('your secret here'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.session());
  app.use(passport.initialize());
  app.use(passport.session());
  app.use(app.router);
  app.use(require('less-middleware')({ src: __dirname + '/public' }));
  app.use(express.static(path.join(__dirname, 'public')));
});

任何类型的每个 HTTP 请求都通过中间件分阶段提供,对吗?

我遇到的问题是,在我的中间件的某个地方,users正在查询我的数据库中的集合并req.user填充了不正确的user文档,我无法确定可能发生的位置。我知道我的中间件是罪魁祸首,但我的调试能力已经开始让我失望了。任何帮助将不胜感激。

编辑:这是我的护照设置:

passport.use(new LocalStrategy(function( username, password, done ) {  
  models.User.authenticate( username, password, function( err, user) {
    // reports CORRECT user
    console.log('\nmodels.User.authenticate callback');
    console.log('--username is ' + user.username);
    console.log(util.inspect(user));

    // return done( err, user );
    return done( err, user);
  });
}));

passport.serializeUser(function( user, done ) {
  // reports CORRECT user
  console.log('\npassport.serializeUser');
  console.log('--username is ' + user.username);
  console.log('--user._id is ' + user._id);
  console.log(util.inspect(user));
  done(null, user._id);
});

passport.deserializeUser(function(id, done) {
  // reports CORRECT user id
  console.log('\npassport.deserializeUser()');
  console.log('user._id is ' + id);
  models.User.findOne( id, function (err, user) {

    done(err, user);
  });
});

看来 serializeUser 和 deserializeUser 按预期工作。他们都在登录时报告正确的凭据。

4

0 回答 0