Ошибка типа: невозможно прочитать свойство 'auth' из неопределенного - PullRequest
0 голосов
/ 17 октября 2011

Я пишу приложение node.js с использованием Express и Mongoose-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, которая находится в середине первого маршрута. Поиск Google показывает мне пару проблем в трекере проблем Everyauth с той же ошибкой, но ни одно из предложенных решений не работает. Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 30 октября 2011

Оказывается, проблема была в несбалансированных скобках, поэтому исправление баланса скобок решило проблему.

0 голосов
/ 18 октября 2011

Я полагаю, что вы пропустили обязательный шаг, см. Декорация схемы в документации mongoose-auth .

Возможно, вы были там, где я был несколько недель назад.Если ваше текущее приложение является новым и, следовательно, все еще небольшим, вы можете начать новый проект с помощью примера программы mongoose-auth.После того, как вы подтвердите, что можете войти и выйти из системы, вы можете добавить функциональность своего приложения.

...