为everyauthconfigurationfindByUserId – 节点,express,mongoose,everyauth

我对Node.js和Express比较陌生。 我试图用Twitter完成everyauth的configuration,我试图访问服务器端的“res.user”,根据everyauth的文档要求.findByUserIdconfiguration。 那是我遇到麻烦的地方 你如何configurationfindByUserId?

这是我得到的。 它目前正在创build一个新的用户或login他们,我没有正确设置.findByUserId,但让我访问我需要在服务器端的req.user。 如果您对如何优化此代码有其他build议,请让我知道,因为我只是在学习。

下面编辑的代码…

App.js

var express = require('express') , everyauth = require('everyauth') , util = require('util') , Promise = everyauth.Promise , users = require('./lib/users') , config = require('./config.js') , twitter = require('./lib/twitter') , games = require('./lib/games') everyauth.twitter .consumerKey(config.twitter.consumerKey) .consumerSecret(config.twitter.consumerSecret) .findOrCreateUser( function (session, accessToken, accessTokenSecret, twitterUserMetadata) { var promise = this.Promise(); users.findOrCreateUserbyTwitterData(twitterUserMetadata, accessToken, accessTokenSecret, promise) return promise; }) .redirectPath('/'); everyauth.everymodule.findUserById(function (userId, callback) { users.findById(userId, callback); }); var app = module.exports = express.createServer(); everyauth.helpExpress(app); // Configuration app.configure(function(){ app.set('views', __dirname + '/views'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({secret: "FxT10477A93d54HJx5"})); app.use(everyauth.middleware()); app.set('view engine', 'jade'); app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); // Routes app.get('/', function(req, res){ console.log(req.user); res.render('index', { title: 'Zeitheist 2' }); }); 

Users.js

 var twitter = require(__dirname + "/twitter"); var mongoose = require('mongoose'); var Schema = mongoose.Schema , ObjectId = Schema.ObjectId; var userSchema = new Schema({ user : ObjectId , id : Number , twitterId : Number , twitterName : String , profileImageUrl : String , name : String , dateCreated : Date , session : String , accessToken : String , accessTokenSecret : String }); var conn = mongoose.createConnection('mongodb://localhost/zeitheist2_test'); var userModel = conn.model('User', userSchema); this.findOrCreateUserbyTwitterData = function(twitterData, accessToken, accessTokenSecret, promise) { userModel.find({'twitterId' : twitterData.id}, function(err, users) { if(err) throw err; if(users.length > 0) { promise.fulfill(users[0]); } else { var user = new userModel(); user.twitterId = twitterData.id user.twitterName = twitterData.screen_name user.profileImageUrl = twitterData.profile_image_url user.name = twitterData.name user.accessToken = accessToken user.accessTokenSecret = accessTokenSecret user.save(function(err) { if (err) throw err; twitter.follow(accessToken, accessTokenSecret); promise.fulfill(user); }); } }); } this.findById = function(userId, callback) { userModel.findOne({'_id' : userId}, function(err, user) { if(err) throw err; if(callback) callback(user); else return user; }); } 

everyauth.everymodule.findUserById如何查看以便我访问req.user? 在我成功login后loggingreq.user的默认路由中,显示“undefined”

你的代码应该是这样的:

 everyauth.everymodule.findUserById(function (userId, callback) { userModel.findById(userId, callback); }); 

在你的代码中,你正在从应该调用callback的函数返回值。 请记住,节点中的大部分内容都是asynchronous的,并使用callback来返回涉及I / O的任何结果(如数据库查找)。