2016-05-25 52 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中登錄新用戶的名稱屬性。我在我原來的文章中添加了index.js文件,希望對你有所幫助。非常感謝你的幫助。 – Ruben

+0

你想做什麼@Ruben將你的'console.log()'語句放到'users.js'文件中。用戶對象當前沒有被傳遞給app.js文件,並且不需要。如果你願意,你可以把所有這些寫在一個JavaScript文件中。通過導出/導入,您只需將模塊化代碼(這是一件好事)。 Express會爲任何請求的路由調用回調函數,'users.js'是將任何內容記錄到控制檯的適當位置。 – metame

+0

感謝您的回覆@metame。問題是,當我console.log(User.getUserByUsername(「用戶名」))'在我的** users.js **它只是寫入未定義。另外我想將它導出到我的app.js中,以便我可以將它發送到我的客戶端以便在那裏顯示它。如果需要,我可以爲您提供完整的代碼。非常感謝你的幫助! – Ruben