2016-12-29 18 views
0

私はこの問題を解決する方法を知らないうちにこの問題に苦しんでいますが、問題は説明するのが少し難しいですが、私は最高、私はNode.Jsとmongoのもののちょっと初心者なので、私はどんなばかげた過ちを許してください。モジュール '../app/models/user'を見つけることができません

私は本平均スタックを踏襲し、問題は、私はAUTHでautenticationを行うにはthisチュートリアルを始めたとき、私は、現時点ではいかなる社会的せずにローカル認証を行って先頭にしています表示されます。

フォルダ構造

folder structure

のでbasicly私はこのようにサーバーを設定します。

process.env.NODE_ENV = process.env.NODE_ENV || 'development'; 
var mongoose = require('./config/mongoose'); 
var express = require('./config/express'); 


var db = mongoose(); 
var app = express(); 
app.listen(3000); 

module.exports = app; 

console.log("running at port 3000"); 

を、これは./config/mongoose

です210

};

必要user.serverモデルここで

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt-nodejs'); 
var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    local   : { 
     email  : String, 
     password  : String, 
    }, 
    facebook   : { 
     id   : String, 
     token  : String, 
     email  : String, 
     name   : String 
    }, 
    twitter   : { 
     id   : String, 
     token  : String, 
     displayName : String, 
     username  : String 
    }, 
    google   : { 
     id   : String, 
     token  : String, 
     email  : String, 
     name   : String 
    } 
    /*firstname:String, 
    lastname:String, 
    email:String, 
    username:String, 
    password:String, 
    userChoice: {type: String, possibleValues: ['programmer','inovator']}*/ 
}); 

UserSchema.methods.generateHash = function(password) { 
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null); 
}; 

UserSchema.methods.validPassword = function(password) { 
    return bcrypt.compareSync(password, this.local.password); 
}; 

mongoose.model('User',UserSchema); 

ここに明示的に

var config   = require('./config'); 
var express   = require('express'); 
var passport  = require('passport'); 
var flash   = require('connect-flash'); 
var compress  = require('compression'); 
var cookieParser = require('cookie-parser'); 
var session   = require('express-session'); 
var bodyParser  = require('body-parser'); 
var morgan   = require('morgan'); 
var methodOverride = require('method-override'); 
var expressLayouts = require('express-ejs-layouts'); 

module.exports = function(){ 
    var app = express(); 

    **require('./passport')(passport);** 

    if(process.env.NODE_ENV === 'development') 
    { 
     app.use(morgan('dev')); 
    } 
    else if(process.env.NODE_ENV === 'production') 
    { 
     app.use(compress()); 

    } 
    app.use(cookieParser()); 

    app.use(bodyParser.urlencoded({ 
     extended:true 
    })); 
    app.use(morgan('dev')); 

    app.use(bodyParser.json()); 
    app.use(methodOverride()); 

    app.use(session({ 
     saveUninitialized: true, 
     resave: true, 
     secret: 'aaaaaaa' 
    })); 



    app.use(passport.initialize()); 
    app.use(passport.session()); // persistent login sessions 
    app.use(flash()); 

    app.set('views', './app/views'); 
    app.set('view engine','ejs'); 
    app.use(expressLayouts); 



    require('../app/routes/index.server.routes.js')(app,passport); 
    require('../app/routes/register.server.routes.js')(app,passport); 
    require('../app/routes/login.server.routes.js')(app,passport); 
    require('../app/routes/profile.server.routes.js')(app,passport); 
    app.use(express.static('./public')); 
    return app; 
} 

問題が表示される場所であるExpress構成され、このラインは主要な問題です瞬間: `require( './パスポート')(パスポート);

私はこのコードを置くと、タイトルに記載されている問題が発生します。私のフォームのPOST要求を投稿しないと、私のコードの構造をMVCの本のような構造と少しを学ぶために自分のコードにチュートリアルの認証を適応したい、このように私のルートにパスポートを渡す

のでbasiclyイム: `

レジスタルート

var register = require('../../app/controllers/register.server.controller'); 

module.exports = function(app,passport) { 
app.route('/register') 
.post(function(req,res){ 
    console.log("HY"); 
     passport.authenticate('local-signup', { 
     successRedirect : '/profile', // redirect to the secure profile section 
     failureRedirect : '/register', // redirect back to the signup page if there is an error 
     failureFlash : true // allow flash messages 
    })}) 
.get(register.getPage); 
}; 

登録コントローラ

var User = require('mongoose').model('User'); 

module.exports = { 

    getPage: function(req,res){ 
     res.render('./pages/register',{ message: req.flash('signupMessage') }); 
    } 

}; 

、ここで終了し、パスポートのコードです:

// config/passport.js 

// load all the things we need 
var LocalStrategy = require('passport-local').Strategy; 

// load up the user model 
var User   = require('../app/models/user'); 

// expose this function to our app using module.exports 
module.exports = function(passport) { 

    // ========================================================================= 
    // passport session setup ================================================== 
    // ========================================================================= 
    // required for persistent login sessions 
    // passport needs ability to serialize and unserialize users out of session 

    // used to serialize the user for the session 
    passport.serializeUser(function(user, done) { 
     done(null, user.id); 
    }); 

    // used to deserialize the user 
    passport.deserializeUser(function(id, done) { 
     User.findById(id, function(err, user) { 
      done(err, user); 
     }); 
    }); 

    // ========================================================================= 
    // LOCAL SIGNUP ============================================================ 
    // ========================================================================= 
    // we are using named strategies since we have one for login and one for signup 
    // by default, if there was no name, it would just be called 'local' 

    passport.use('local-signup', new LocalStrategy({ 
     // by default, local strategy uses username and password, we will override with email 
     usernameField : 'email', 
     passwordField : 'password', 
     passReqToCallback : true // allows us to pass back the entire request to the callback 
    }, 
    function(req, email, password, done) { 

     // asynchronous 
     // User.findOne wont fire unless data is sent back 
     process.nextTick(function() { 

     // find a user whose email is the same as the forms email 
     // we are checking to see if the user trying to login already exists 
     User.findOne({ 'local.email' : email }, function(err, user) { 
      // if there are any errors, return the error 
      if (err) 
       return done(err); 

      // check to see if theres already a user with that email 
      if (user) { 
       return done(null, false, req.flash('signupMessage', 'That email is already taken.')); 
      } else { 

       // if there is no user with that email 
       // create the user 
       var newUser   = new User(); 

       // set the user's local credentials 
       newUser.local.email = email; 
       newUser.local.password = newUser.generateHash(password); 

       // save the user 
       newUser.save(function(err) { 
        if (err) 
         throw err; 
        return done(null, newUser); 
       }); 
      } 

     });  

     }); 

    })); 

}; 

シモンズ:長い記事のために申し訳ありませんが、私は私がしたいので、私は説明を取得することを願ってもっと学ぶために、私が本を読んだとき、私はautorによって適応されたmvc構造が難しいと感じましたが、とにかくおかげさまでたくさんありました。

君たちはこれを見ないようにしたい場合は私が理解し、ここにgitProjectです:git project

答えて

0

は、あなたのuser.server.model.jsファイルでこれを試してみてください。代わりにちょうど

mongoose.model('User',UserSchema);

のがアクセスするには、下にこれを試してみてください。

module.exports = { User : mongoose.model('User', UserSchema) }

+0

働いていませんでした:/おかげでとにかく:/、私はあなたが多分高速ビューを与えることができれば、問題を検出しやすくなり、リンクで上githubの上のプロジェクトを持っています –

関連する問題