2016-05-25 15 views
0

私はログインシステムも持っているマルチプレイヤーゲームを作成しています。だから、私はapp.jsとusers.jsを持っています。 users.jsでは、ユーザーに関するデータが保存されており、その情報を自分のapp.jsに送信します。ユーザーの情報をusers.jsからapp.jsに送信

マイapp.js

var express = require('express'); 
var path = require('path'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var exphbs = require('express-handlebars'); 
var expressValidator = require('express-validator'); 
var flash = require('connect-flash'); 
var session = require('express-session'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var mongo = require('mongodb'); 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/loginapp'); 
var db = mongoose.connection; 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

// Init App 
var app = express(); 
var server = require("http").Server(app); 
var io = require("socket.io")(server); 

// View Engine 
app.set('views', path.join(__dirname, 'views')); 
app.engine('handlebars', exphbs({defaultLayout:'layout'})); 
app.set('view engine', 'handlebars'); 

// BodyParser Middleware 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 

// Set Static Folder 
app.use(express.static(path.join(__dirname, 'public'))); 

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

// Passport init 
app.use(passport.initialize()); 
app.use(passport.session()); 

// Express Validator 
app.use(expressValidator({ 
    errorFormatter: function(param, msg, value) { 
     var namespace = param.split('.') 
     , root = namespace.shift() 
     , formParam = root; 

    while(namespace.length) { 
     formParam += '[' + namespace.shift() + ']'; 
    } 
    return { 
     param : formParam, 
     msg : msg, 
     value : value 
    }; 
    } 
})); 

// Connect Flash 
app.use(flash()); 

// Global Vars 
app.use(function (req, res, next) { 
    res.locals.success_msg = req.flash('success_msg'); 
    res.locals.error_msg = req.flash('error_msg'); 
    res.locals.error = req.flash('error'); 
    res.locals.user = req.user || null; 
    next(); 
}); 

app.use('/', routes); 
app.use('/users', users); 

server.listen(process.env.PORT || 3000, function(){ 
    console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env); 
}); 

マイusers.js

var express = require('express'); 
    var router = express.Router(); 
    var passport = require('passport'); 
    var LocalStrategy = require('passport-local').Strategy; 

    var User = require('../models/users'); 

    // Register 
    router.get('/register', function(req, res){ 
     res.render('register'); 
    }); 

    // Login 
    router.get('/login', function(req, res){ 
     res.render('login'); 
    }); 

    //Register User 
    router.post('/register', function(req, res){ 
     var name = req.body.name; 
     var email = req.body.email; 
     var username = req.body.username; 
     var password = req.body.password; 
     var password2 = req.body.password2; 

    // Validation 
     req.checkBody('name', 'Name is required').notEmpty(); 
     req.checkBody('email', 'Email is required').notEmpty(); 
     req.checkBody('email', 'Email is not valid').isEmail(); 
     req.checkBody('username', 'Username is required').notEmpty(); 
     req.checkBody('password', 'Password is required').notEmpty(); 
     req.checkBody('password2', 'Passwords do not match').equals(req.body.password); 


     var errors = req.validationErrors(); 

     if(errors) 
     { 
      res.render('register',{ 
       errors:errors 
      }); 

     } else 
     { 
      var newUser = new User({ 
       name: name, 
       email:email, 
       username: username, 
       password: password 
      }); 

      User.createUser(newUser, function(err, user){ 
       if(err) throw err; 
       console.log(user); 
      }); 

      req.flash('success_msg', 'You are registered and can now login'); 

      res.redirect('/users/login'); 
     } 
    }); 

    passport.use(new LocalStrategy(
     function(username, password, done) { 
     User.getUserByUsername(username, function(err, user){ 
     if(err) throw err; 
     if(!user){ 
      return done(null, false, {message: 'Unknown User'}); 
     } 

     User.comparePassword(password, user.password, function(err, isMatch){ 
      if(err) throw err; 
      if(isMatch){ 
       return done(null, user); 
      } else { 
       return done(null, false, {message: 'Invalid password'}); 
      } 
     }); 
     }); 
     })); 

    passport.serializeUser(function(user, done) { 
     done(null, user.id); 
    }); 

    passport.deserializeUser(function(id, done) { 
     User.getUserById(id, function(err, user) { 
     done(err, user); 
     }); 
    }); 

    router.post('/login', 
     passport.authenticate('local', {successRedirect:'/', failureRedirect:'/users/login',failureFlash: true}), 
     function(req, res) { 
     res.redirect('/'); 
     });  

    router.get('/logout', function(req, res){ 
     req.logout(); 

     req.flash('success_msg', 'You are logged out'); 

     res.redirect('/users/login'); 
    }); 


    module.exports = router; 

事前にどうもありがとう。

UPDATE: index.js

var express = require('express'); 
var router = express.Router(); 

    // Get Homepage 
    router.get('/', ensureAuthenticated, function(req, res){ 
    res.render('index'); 
}); 

    function ensureAuthenticated(req, res, next){ 
    if(req.isAuthenticated()){ 
     return next(); 
    } else { 
     //req.flash('error_msg','You are not logged in'); 
     res.redirect('/users/login'); 
    } 
    } 

module.exports = router; 

答えて

1

あなたは既にusers.js/routes/users.jsで実際にあると仮定して、アプリにユーザーを 'ロード' されています。 app.jsのvar users = require('./routes/users')行は、ユーザールートのエクスポートをインポートしています。

最初の引数が/usersapp.use('/users',users)のいずれのパスでも、アプリケーションにこれらのルートを使用しています。

アプリケーションでユーザーデータを取得する際に特に問題が発生した場合は、質問を編集して詳細を入力する必要があります。

+0

ありがとう、私はそれを忘れました。しかし、私はmodule.exportsの動作を知っていますが、この場合はありません。私はちょうど私のapp.jsのnewUserの名前プロパティをログに記録したい元の投稿にindex.jsファイルを追加しました。あなたの助けに感謝します。 – Ruben

+0

あなたがしたいこと@Rubenは 'console.log()'ステートメントを 'users.js'ファイルに入れます。ユーザーオブジェクトは現在app.jsファイルに渡されておらず、そうである必要はありません。あなたが望むなら、これをすべて1つのJavaScriptファイルに記述することができます。エクスポート/インポートすることで、コードをモジュール化するだけです(これは良いことです)。 Expressはどのルートでもコールバック関数を呼び出し、 'users.js'はコンソールに何かを記録するのに適切な場所です。 – metame

+0

あなたのお返事ありがとう、@metame。問題は、私が 'console.log(User.getUserByUsername(" username "))'をmy ** users.js **に置くと、定義されていないということだけです。また、app.jsにエクスポートして、クライアント側に表示して表示することができます。必要に応じて、私は完全なコードを提供することができます。あなたの助けをありがとう! – Ruben

関連する問題