My directory structure is like this:
collegesapp
├── node_modules
│ ├── express
│ ├── connect
│ ├── jade
│ └── passport
├── routes
│ └── routes.js
├── views
│ ├── index.jade
│ └── signin.jade
├── app.js
└── package.json
exports.serialized_user = serialized_user; //in app.js file *The variable serialized_user returns "Alex"
var serialized_user = require('../app.js').serialized_user; //in routes.js file
So, when I add console.log(typeof(serialized_user))
to my routes.js
file and run the application, I end up seeing undefined
in the console instead of "string"
and when I add console.log(serialized_user)
to my routes.js
file and run the application, I end up seeing nothing in console instead of "Alex"
.
What do you think is my problem? Thank you in advance :)
Here is my entire app :
//app.js file
var express = require('express');
var connect = require('connect');
var passport = require('passport');
var localStrategy = require('passport-local').Strategy;
var mongoose = require('mongoose');
var mongodb = require('mongodb');
var bodyParser = require('body-parser');
var methodOverride = require('method-override');;
var serveStatic = require('serve-static');
var errorHandler = require('errorhandler');
var routes = require('./routes/routes.js');
var user_model = require('./models/user_model.js');
var app = express();
//configuration
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(methodOverride());
app.use(express.Router());
app.use(serveStatic(__dirname + '/public_assets'));
app.use(passport.initialize());
app.use(passport.session());
if('development' == app.get('env')){
app.use(errorHandler({dumpExceptions:true,showStack:true}));
}
if('production' == app.get('env')){
app.use(errorHandler());
}
//user authentication on sign in
passport.use('signin_local_strategy', new localStrategy(
function(username,password,done){
user_model.findOne({username: username}, function(err, user){
if(err)
{
return(done(err));
}
if(!user)
{
return(done(null,false));
}
if(user.password != password)
{
return(done(null,false));
}
return(done(null,user));
});
}
));
var serialized_username;
passport.serializeUser(function(user, done){
done(null, user.id);
serialized_user = user.username;
console.log(serialized_user); //<<--- returns "Alex"
console.log(typeof(serialized_user)); //<<--- returns string
});
exports.serialized_user = serialized_user;
passport.deserializeUser(function(done,user){
user_model.findById(function(id, err){
done(err,user);
})
});
//routes
app.get('/', routes.indexResponseHandler);
app.get('/signin', routes.signinResponseHandler);
app.get('/signup', routes.signupResponseHandler);
app.get('/profile', routes.userProfileResponseHandler);
app.get('/failure', routes.signinErrorResponseHandler);
app.post('/signin',
passport.authenticate('signin_local_strategy', { successRedirect:'/profile',
failureRedirect: '/failure'})
);
app.get('/db', routes.dbQuery);
app.listen(3000);
//routes.js
var user_model = require('../models/user_model.js');
var serialized_user = require('../app.js').serialized_user;
exports.indexResponseHandler = function (req, res){
res.render('index', {title: "College Clubs MN"});
}
exports.signinResponseHandler = function (req, res){
res.render('signin', {title:"College Clubs MN | Sign in"});
}
exports.signupResponseHandler = function(req, res){
res.render('signup', {title: "College Clubs MN | Sign Up"});
}
exports.userProfileResponseHandler = function(req, res){
console.log(typeof((serialized_user))); //logs undefined but was supposed to logstring
res.send(typeof((serialized_user))); //<<-- shows undefined but was supposed to return string
}
exports.signinErrorResponseHandler = function(req, res){
res.send("Faild to Sign in ! :(");
}
//user_models.js
var mongoose = require('mongoose');
var schema = mongoose.Schema;
mongoose.connect(--);//connected to db
var userSchema = new schema({
username : String,
password : String,
hometown : String,
age : Number
}, {collection : 'user'});
var user_model = mongoose.model('user', userSchema);
module.exports = user_model;
In app.js:
module.exports = {
'serialized_user': serialized_user
};
and access it with
var serialized_user = require('../app.js')
console.log(serialized_user.serialized_user):
And maybe have a look at this: http://www.sitepoint.com/understanding-module-exports-exports-node-js/
@clto,
//app.js
Now I added a console.log(serialized_user) to the function of the first parameter of passport's serializeUser method.
This looks like following and the console says the string "Alex":
var serialized_username;
passport.serializeUser(function(user, done){
done(null, user.id);
serialized_user = user.username;
console.log(serialized_user); //<<--- returns "Alex"
console.log(typeof(serialized_user)); //<<--- returns string
});
And then I added a console.log(serialized_user) outside of passport.serializeUser(...), which is the last line of the following code and it returns undefined.
var serialized_username;
passport.serializeUser(function(user, done){
done(null, user.id);
serialized_user = user.username;
console.log(serialized_user); //<<--- returns "Alex"
console.log(typeof(serialized_user)); //<<--- returns string
});
console.log((serialized_user)); //<<--- returns undefined
Does this error have something to do with Node's way of execution(synchronous and asynchronous), maybe?
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.