Created
March 12, 2013 12:53
-
-
Save shimondoodkin/5142644 to your computer and use it in GitHub Desktop.
node.js reverse proxy at end of express. to make post commands work must remove bodyparser and mothod override. use body parser as middleware of app.get command.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// this is not a main file the main file is opchart.js | |
var express = require('express') | |
// , routes = require('./routes') | |
// , user = require('./routes/user') | |
, path = require('path'); | |
sessionStore=false //defined on first time it could be catched from a request | |
app = express();//global | |
// User validation | |
var auth = express.basicAuth(function(user, pass) { | |
return (user=="test"&&pass=="test") ? true : false; | |
},'Secret Area'); | |
var httpProxy = require('http-proxy'); | |
var proxy = new httpProxy.RoutingProxy({ | |
enable : { | |
xforward: true // enables X-Forwarded-For | |
} | |
}); | |
// the idea behind user id , that it is like session id ... | |
// it is usualy if you like to interact between connected users you would share all the session ids of all users to all users in the room | |
// when you expose session id someone can use it on other side which is a security risk | |
// so it is another temporary id but without a security risk | |
function session_adduserid(req,res,next){ | |
if(!req.session.userid) | |
{ | |
req.session.userid=require('express/node_modules/connect/lib/utils').uid(24);// expose user's session it is unsecure lets have another id | |
userid_to_sessionid[req.session.userid]=req.sessionID; | |
} | |
if(!sessionStore)sessionStore=req.sessions; | |
req.session.lasttouch=new Date().getTime(); | |
next(); | |
} | |
function session_userid_manager() | |
{ | |
var ks=Object.keys(userid_to_sessionid),userid,sessionID,session; | |
var expire_at=new Date(); | |
// console.log(expire_at.getTime()) | |
expire_at.setMinutes(expire_at.getMinutes()-30); | |
expire_at=expire_at.getTime(); | |
for(i =0;i<ks.length;i++) | |
{ | |
userid=ks[i]; | |
sessionID=userid_to_sessionid[userid]; | |
session=sessionStore[sessionID]; | |
if(!session) delete userid_to_sessionid[userid]; | |
else if(session.lasttouch<expire_at) | |
{ | |
//console.log('delete expired sessionID '+sessionID); | |
delete sessionStore[sessionID]; | |
delete userid_to_sessionid[userid]; | |
} | |
} | |
//console.log('sessions ',sessionStore); | |
} | |
userid_to_sessionid={};//global | |
//var sesame=require('sesame'); | |
//app.configure(function(){ | |
app.disable('x-powered-by'); | |
app.set('port', process.env.PORT || 80); | |
app.set('views', __dirname + '/views'); | |
app.set('view engine', 'jade'); | |
app.use(express.favicon()); | |
//app.use(express.logger('dev')); | |
app.use(express.cookieParser()); | |
//var sessionStore=new express.session.MemoryStore();//http://nodetoolbox.com/packages/mysql-session-store | |
app.use(require('sesame')({ /*store: sessionStore ,*/ secret: 'secret' , key: 'express.sid', /*maxAge :24*3600000 //1 Hour * 24*/ })); | |
app.use(session_adduserid); | |
setInterval(session_userid_manager,1*60*1000);// once a minute clear old userids | |
/* | |
app.all('/', function (req, res, next) { | |
res.header("Access-Control-Allow-Origin", "*"); | |
res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Origin, X-File-Name, Content-Type, Cache-Control"); | |
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); | |
next(); | |
}); | |
*/ | |
bodyParser=express.bodyParser() | |
//app.use(bodyParser); | |
//app.use(require('connect-restreamer')()); | |
//app.use(express.methodOverride()); | |
app.use(app.router); | |
app.use(express.static(path.join(__dirname, 'public'))); | |
//}); | |
app.use(function(req, res) { // reverse proxyhere | |
proxy.proxyRequest(req, res, { | |
host: '127.0.0.1', | |
port: 8000 | |
}); | |
}); | |
//app.configure('development', function(){ | |
app.use(express.errorHandler()); | |
//}); | |
var gif_1x1_buffer = new Buffer("R0lGODlhAQABAIAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==", encoding='base64');// Store imageData buffer 1x1 pixel transparent gif file | |
app.get('/keepsession.gif', function(req,res){ | |
res.writeHead(200, | |
{ | |
'Cache-Control': 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0', | |
'Pragma': 'no-cache', | |
'Expires':"Tue, 01 Jan 2000 12:12:12 GMT", | |
'Content-Type': 'image/gif' | |
}); | |
res.write(gif_1x1_buffer.toString('binary'), 'binary'); | |
res.end(); | |
if(!req.session)console.log("session is undefined") | |
else req.session.lasttouch=new Date().getTime() | |
}); | |
// view session (for development) | |
app.get('/s', function(req,res){ | |
//console.log(req); | |
res.writeHead(200, | |
{ | |
'Cache-Control': 'no-cache', | |
'Pragma': 'no-cache', | |
'Content-Type': 'text/html', | |
'Expires':"Tue, 01 Jan 2000 12:12:12 GMT" | |
}); | |
res.end("sessionid="+req.sessionID+' session='+JSON.stringify(req.session)); | |
}); | |
//app.get('/', routes.index); | |
//app.get('/users', user.list); | |
//module.exports=app; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
So what you did is remove bodyParser? that's not a good solution.