I’m writing a node.js app using express and mongoose-auth. When I run my app, I get a webpage with the following stacktrace.
TypeError: Cannot read property 'auth' of undefined
at HTTPServer. (/home/levi/Projects/Cloudrr/node_modules/mongoose-auth/node_modules/everyauth/lib/expressHelper.js:7:27)
at ServerResponse._render (/home/levi/Projects/Cloudrr/node_modules/express/lib/view.js:393:58)
at ServerResponse.render (/home/levi/Projects/Cloudrr/node_modules/express/lib/view.js:315:17)
at /home/levi/Projects/Cloudrr/app.js:41:7
at callbacks (/home/levi/Projects/Cloudrr/node_modules/express/lib/router/index.js:272:11)
at param (/home/levi/Projects/Cloudrr/node_modules/express/lib/router/index.js:246:11)
at pass (/home/levi/Projects/Cloudrr/node_modules/express/lib/router/index.js:253:5)
at Router._dispatch (/home/levi/Projects/Cloudrr/node_modules/express/lib/router/index.js:280:4)
at Object.handle (/home/levi/Projects/Cloudrr/node_modules/express/lib/router/index.js:45:10)
at next (/home/levi/Projects/Cloudrr/node_modules/express/node_modules/connect/lib/http.js:201:15)
Here’s my app.js:
/**
* Module dependencies.
*/
var express = require('express');
var mongoose = require('mongoose');
var mongooseAuth = require('mongoose-auth');
var model = require("./models");
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
app.use(mongooseAuth.middleware())
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Database
var Proffile = mongoose.model('Profile', model.Profile);
var Cloudrr = mongoose.model('Cloudrr', model.Cloudrr);
var Cloud = mongoose.model('Cloud', model.Cloud);
var User = mongoose.model('User', model.UserSchema);
mongoose.connect('mongodb://localhost/cloudrr');
// Routes
app.get('/', function(req, res){
res.render('index', {
title: 'Cloudrr | Lorem ipsum'
});
});
app.get('/index', function(req, res){
res.render('index', {
title: 'Cloudrr | Lorem ipsum'
});
});
app.get('/left', function(req, res){
if(req.loggedIn == True)
{
Profile.findById(req.user, function(user){
res.render('left', {
title: "Welcome back!",
user_id: user.profileID,
avatar: user.avatar,
followers: user.followers.length(),
following: user.following.length(),
});
});
}
else
{
res.render("left", {
title: "you need to log in."
});
}
});
mongooseAuth.helpExpress(app);
app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
and package.json.
{
"name": "cloudrr"
, "version": "0.0.1"
, "private": true
, "dependencies": {
"express": "2.4.6"
, "jade": ">= 0.0.1"
, "mongoose": ">= 2.1.3"
, "mongoose-types": ">= 1.0.3"
, "mongoose-auth": ">= 0.0.11"
}
}
What am I doing wrong? The stack trace points to line 41, which is in the middle of the first route. A google search shows me a couple issues in the everyauth issue tracker with the same error, but none of the solutions provided work. Thank you for your time.
It turns out the problem was unbalanced brackets, so fixing thee bracket balance fixed the issue.