2011-10-17 21 views
0

我正在使用express和mongoose-auth編寫node.js應用程序。當我運行我的應用程序時,我得到一個帶有以下堆棧跟蹤的網頁。TypeError:無法讀取未定義的屬性'auth'

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) 

這裏是我的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); 

和的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" 
    } 
} 

我在做什麼錯?堆棧跟蹤指向位於第一條路線中間的第41行。谷歌搜索在everyauth問題跟蹤器中向我展示了幾個具有相同錯誤的問題,但沒有提供任何解決方案。感謝您的時間。

+1

您可以通過編輯堆棧頂部的文件'expressHelper.js'並在拋出異常的方法中插入'調試器'語句來自己追蹤。然後使用內置的節點調試器或像node-inspector(我選擇的調試器)這樣的工具來檢查狀態和調用路徑,以查看問題出在哪裏。 – broofa

回答

0

事實證明,問題是不平衡的括號,所以修復他括號餘額固定的問題。

0

我相信你錯過了一個必需的步驟,請參閱mongoose-auth documentation中的架構裝飾。

你可能是我幾個星期前的地方。如果您的當前應用程序是新的,因此仍然很小,則可能需要使用mongoose-auth示例程序啓動一個新項目。驗證後,您可以登錄和註銷,您可以添加您的應用程序功能。

相關問題