Serve client files from the server (with optional automatic JS compression).

Esse commit está contido em:
Joshua Gross
2011-03-03 10:56:16 -06:00
commit 1be565833d
3 arquivos alterados com 69 adições e 53 exclusões
+3 -41
Ver Arquivo
@@ -30,46 +30,8 @@ Install `Node.js`:
Install Node Package Manager (`npm`):
See instructions at http://github.com/isaacs/npm.
Install `Express.js` and `Connect` (included automatically):
npm install express
Compile the daemon add-on if you plan on letting the server daemonize itself:
cd server/libs/daemon
node-waf configure build
cp build/default/daemon.node .
rm -rf build
## Installation for Development
If you want to test Ajax IM as a standalone app for development, you will need
to install [`Jade`](http://github.com/visionmedia/jade) as well.
To install `Jade`:
npm install jade
## Starting up the server
Starting the server in _development_ mode is as simple as:
node server/app.js
To start the server in _production_ mode:
EXPRESS_ENV=production node server/app.js
To start the server as a _daemon_ in _production_ mode:
node server/app.js start production
## Testing it out
Once the server is up and running in _development_ mode, you can test it out
through the included development testing app. The below instructions are
assuming that you have left all default configuration options. If not, please
replace the host/port values with the correct ones.
To get started, first initialize a session cookie by going to:
http://localhost:8000/dev/cookie
Then head over to the development page that will initialize the client:
http://localhost:8000/dev/
Install `Socket.io` (included automatically):
npm install socket-io
That's it!
@@ -82,7 +44,7 @@ That's it!
## Node Compatibility
The `master` branch of Ajax IM is compatible with node --version:
v0.2.5
v0.4.1
## Contributing
+65 -11
Ver Arquivo
@@ -1,30 +1,84 @@
#!/usr/bin/env node
var http = require('http'),
io = require('./libs/socket.io'),
url = require('url'),
fs = require('fs'),
io = require('socket.io'),
uglifyjs,
o_ = require('./libs/utils'),
client = {
'im.js': [
'intro.js',
'cookies.js', 'dateformat.js', 'json.js', 'md5.js', 'store.js',
/*'templates.js',*/ 'im.js',
'outro.js'
]
},
contentTypes = {
js: 'text/javascript'
},
_clientFiles = {},
server, socket;
try { var uglifyjs = require('uglify-js'); } catch(e) {}
o_.merge(global, require('./settings'));
try { o_.merge(global, require('./settings.local')); } catch(e) {}
server = http.createServer(function(req, res) {
// Any other server code goes here.
res.writeHead(200, {'Content-Type': 'text/html'});
res.end('');
});
server = http.createServer(_serveClient);
server.listen(APP_PORT, APP_HOST);
var auth_handler = require('./auth/' + AUTH_LIBRARY)(),
session_store = require('./session/' + SESSION_STORE)(),
msg_handler = require('./message/' + MESSAGE_HANDLER)(auth_handler, session_store);
var authHandler = require('./auth/' + AUTH_LIBRARY)(),
sessionStore = require('./session/' + SESSION_STORE)(),
msgHandler = require('./message/' + MESSAGE_HANDLER)(authHandler, sessionStore);
// setup socket.io
socket = io.listen(server);
socket.on('connection', function(client) {
client.on('message', function(message) {
msg_handler.message(client, message);
msgHandler.message(client, message);
});
client.on('disconnect', function() {
msg_handler.disconnect(client, SESSION_TIMEOUT);
msgHandler.disconnect(client, SESSION_TIMEOUT);
});
});
// compile client javascript
for(var file in client) {
var fileData = "";
for(var i = 0, fl = client[file].length; i < fl; i++)
fileData += fs.readFileSync(
__dirname + '/../client/js/' + client[file][i],
'utf8'
);
var ext = file.split('.').pop();
if(ext == 'js' && uglifyjs) {
// if uglify-js is installed, let's compress
fileData = uglifyjs.parser.parse(fileData);
fileData = uglifyjs.uglify.ast_mangle(fileData);
fileData = uglifyjs.uglify.ast_squeeze(fileData);
fileData = uglifyjs.uglify.gen_code(fileData);
}
_clientFiles[file] = {
headers: {
'Content-Length': fileData.length,
'Content-Type': contentTypes[ext]
// Should use ETag
},
content: fileData,
encoding: 'utf8'
};
};
// serve client javascript
function _serveClient(req, res) {
var path = url.parse(req.url).pathname,
file = path.substr(1);
if(req.method == 'GET' && file in _clientFiles) {
res.writeHead(200, _clientFiles[file].headers);
res.end(_clientFiles[file].content, _clientFiles[file].encoding);
} else {
res.writeHead(404);
res.end('404');
}
}
+1 -1
Ver Arquivo
@@ -14,7 +14,7 @@ APP_HOST = 'localhost';
APP_PORT = 8000;
// Document me!
AUTH_LIBRARY = 'default';
AUTH_LIBRARY = 'example';
SESSION_STORE = 'memory';
MESSAGE_HANDLER = 'default';