我正在使用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問題跟蹤器中向我展示了幾個具有相同錯誤的問題,但沒有提供任何解決方案。感謝您的時間。
您可以通過編輯堆棧頂部的文件'expressHelper.js'並在拋出異常的方法中插入'調試器'語句來自己追蹤。然後使用內置的節點調試器或像node-inspector(我選擇的調試器)這樣的工具來檢查狀態和調用路徑,以查看問題出在哪裏。 – broofa