我正在尝试调试我的应用程序,并且在这样做时我意识到我并不完全理解 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 按预期工作。他们都在登录时报告正确的凭据。