嘗試幾小時我真的不知道如何訪問會話數據。當用戶登錄該應用程序時,ID和名稱將保存在req.session中。如何在其他javascript文件中使用req.session數據expressjs
exports.form = function (req, res) {
res.render('login', {
title: 'Login'
});
};
var User = require('../lib/user');
exports.submit = function (req, res, next) {
var data = req.body.user;
User.authenticate(data.name, data.pass, function (err, user) {
if (err) return next(err);
if (user) {
req.session.uid = user.id;
req.session.username = user.name;
res.redirect('/index');
} else {
res.error("Sorry! invalid credentials.");
res.redirect('back');
}
});
};
exports.logout = function (req, res) {
req.session.destroy(function (err) {
if (err) throw err;
res.redirect('/');
})
};
這是app.js
var express = require('express');
var routes = require('./routes');
var path = require('path');
var index = require('./routes/index');
var register = require('./routes/register');
var messages = require('./lib/messages');
var login = require('./routes/login');
var user = require('./lib/middleware/user');
var requireLogin = require('./lib/middleware/logedIn');
var api = require('./routes/api');
var
gameport = process.env.PORT || 4004,
io = require('socket.io'),
express = require('express'),
UUID = require('node-uuid'),
verbose = false,
http = require('http'),
app = express(),
server = http.createServer(app);
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(express.static(__dirname + '/public'));
app.use(user);
app.use(messages);
app.use(app.router);
//app.use('/index', requireLogin);
app.get('/index', requireLogin.auth, function (req, res)
{
//app.get('/index');
res.render('index', { title: 'Express' });
});
app.get('/register', register.form);
app.post('/register', register.submit);
app.get('/login', login.form);
app.post('/login', login.submit);
app.get('/logout', login.logout);
app.get('/api/user/:id', api.user);
server.listen(gameport)
//Log something so we know that it succeeded.
console.log('\t :: Express :: Listening on port ' + gameport);
//By default, we forward the/path to index.html automatically.
app.get('/', function(req, res){
console.log('trying to load %s', __dirname + '/index.html');
res.sendfile('/index.html' , { root:__dirname });
});
//This handler will listen for requests on /*, any file from the root of our server.
//See expressjs documentation for more info on routing.
app.get('/*' , function(req, res, next) {
//This is the current file they have requested
var file = req.params[0];
//For debugging, we can track what files are requested.
if(verbose) console.log('\t :: Express :: file requested : ' + file);
//Send the requesting client the file.
res.sendfile(__dirname + '/' + file);
}); //app.get *
//Create a socket.io instance using our express server
var sio = io.listen(server);
//Configure the socket.io connection settings.
//See http://socket.io/
sio.configure(function(){
sio.set('log level', 0);
sio.set('authorization', function (handshakeData, callback) {
callback(null, true); // error first callback style
});
});
//Enter the game server code. The game server handles
//client connections looking for a game, creating games,
//leaving games, joining games and ending games when they leave.
game_server = require('./game.server.js');
//Socket.io will call this function when a client connects,
//So we can send that client looking for a game to play,
//as well as give that client a unique ID to use so we can
//maintain the list if players.
sio.sockets.on('connection', function (client) {
//Generate a new UUID, looks something like
//5b2ca132-64bd-4513-99da-90e838ca47d1
//and store this on their socket/connection
client.userid = UUID();
//tell the player they connected, giving them their id
client.emit('onconnected', { id: client.userid });
//now we can find them a game to play with someone.
//if no game exists with someone waiting, they create one and wait.
game_server.findGame(client);
//Useful to know when someone connects
console.log('\t socket.io:: player ' + client.userid + ' connected');
//Now we want to handle some of the messages that clients will send.
//They send messages here, and we send them to the game_server to handle.
client.on('message', function(m) {
game_server.onMessage(client, m);
}); //client.on message
//When this client disconnects, we want to tell the game server
//about that as well, so it can remove them from the game they are
//in, and make sure the other player knows that they left and so on.
client.on('disconnect', function() {
//Useful to know when soomeone disconnects
console.log('\t socket.io:: client disconnected ' + client.userid + ' ' + client.game_id);
//If the client was in a game, set by game_server.findGame,
//we can tell the game server to update that game state.
if(client.game && client.game.id) {
//player leaving a game should destroy that game
game_server.endGame(client.game.id, client.userid);
} //client.game_id
}); //client.on disconnect
}); //sio.sockets.on connection
,我有一個game.js腳本。它不在任何路線或任何東西,但那是我需要獲得用戶名的地方。
這對於用戶
var User = require('../user');
module.exports = function(req, res, next)
{
var uid = req.session.uid;
if(!uid) return next();
User.get(uid, function(err, user)
{
if(err) return next(err);
req.user = res.locals.user = user;
next();
});
};
德中間件所以這是我的全部。所以我有這個game.js腳本。並在該JavaScript我需要訪問會話數據。
只要包含會話中間件,您就可以在請求作爲參數的回調中以同樣的方式訪問它。 – adeneo
你可以發佈你的中間件設置?只要中間件堆棧配置正確,所有路由中間件都應該有權訪問'req.session'對象。 – srquinn
我添加了app.js和user.js,我希望你能幫我解決 – Julien