2016-12-29 6 views
0

Ich kämpfte mit diesem Problem wie mehr als 40 Stunden und Schwelle weiß nicht, wie man das löst, das Problem ist ein wenig groß zu erklären, aber ich werde mein versuchen Am besten, ich bin ein kleiner Neuling mit Node.Js und Mongo-Stuffs, also vergib mir jeden dummen Fehler.kann Modul '../app/models/user' nicht finden

ich das Buch Mittlere Stapel und das Problem scheint gefolgt, wenn ich this Tutorial gestartet, die autentication mit Auth zu tun, bin ich zu Beginn die lokale Authentifizierung ohne jeden sozialen im Moment tun.

Ordnerstruktur

folder structure

so basicly ich den Server wie folgt festgelegt:

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"); 

ist dies die ./config/mongoose

var config = require('./config'); 
var mongoose = require('mongoose'); 
var connectionString = "mongodb://localhost:27017/ShareIdea" 

module.exports = function(){ 
mongoose.Promise = global.Promise; 
var db = mongoose.connect(connectionString); 

require('../app/models/user.server.model'); 

return db; 

};

die erforderliche user.server Modell

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); 

hier ist die ausdrückliche Konfiguration

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; 
} 

hier im Express ist, wo die Probleme auftreten, ist diese Linie das Hauptproblem bei der Moment: "verlangen ('./ Pass') (Reisepass);

Wenn ich diesen Code setze gibt es mir das Problem, dass ich im Titel erwähnt, wenn nicht, wenn ich eine POST-Anfrage mit meinem Formular nie posts, habe ich diese Probleme, weil ich die Strukturen meines Codes zu a MVC Struktur wie das Buch und wollen die Authentifizierung im Tutorial zu meinem Code anzupassen, ein wenig zu lernen,

so basicly im Paß auf meine Routen wie diese vorbei: `

Register Route

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); 
}; 

Register Controller

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

module.exports = { 

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

}; 

und hier zu beenden, ist der Pass-Code:

// 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); 
       }); 
      } 

     });  

     }); 

    })); 

}; 

Ps: Sorry für den langen Post, hoffe ich, dass ich eine Erklärung erhalten können, da ich will um mehr zu erfahren, als ich das Buch las, fühlte ich mich wie die vom Autor angepasste MVC-Struktur, aber sowieso vielen Dank.

wenn Sie wollen Jungs nicht auf diese i und hier zu verstehen suchen, ist die gitProject: git project

Antwort

0

Versuchen Sie dies in Ihrer user.server.model.js Datei. Statt nur

mongoose.model('User',UserSchema);

dies unten Versuchen Sie es zugänglich sind.

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

+0

nicht gearbeitet hat: /, ich habe das Projekt auf Github in dem obigen Link, wenn Sie vielleicht einem schnellen Blick geben können, ist es einfacher, Probleme zu erkennen,:/trotzdem danke –