Mercurial > psgxs
view modules/mod_http.js @ 41:bc717575e66a
Much better handling of modules.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sun, 20 Feb 2011 15:51:12 +0100 |
parents | 62cbb1c49bc5 |
children | 023f767662d3 |
line wrap: on
line source
var sites = {}; var http = require('http'); var fs = require('fs'); var dir = require('./configuration').pluginsDir; var files = fs.readdirSync(dir + '/http'); var regex = /^mod_.*\.js/; var Script = process.binding('evals').Script; var sandbox = { config: require('./configuration'), xmpp: require('xmpp'), errors: require('./errors'), forms: require('./forms'), makeError: require('./errors').makeError, notifs: require('./notifs'), NS: require('./namespaces'), require: require, storage: require('./storage'), toBareJID: require('./fdsq').toBareJID, exports: {} }; for (var i in files) { var file = files[i]; if (!regex.test(file)) continue; fs.readFile(dir + '/http/' + file, function(err, data) { if (err) { console.log('ERROR: loading http module “'+file+'”.'); // FIXME: file is always the last file of the list… return; } Script.runInNewContext(data, sandbox, dir + '/http/' + file); // FIXME: the same. var module = sandbox.exports; sandbox.exports = {}; for (var j in module) { if (typeof sites[j] != 'undefined') console.log('WARNING: module http/'+j+' already loaded.'); sites[j] = module[j]; } }); } http.createServer(function (req, res) { var sent = false; for (var i in sites) { var site = sites[i]; if (!site.url.test(req.url)) continue; sent = site.func(req, res); return; } if (!sent) { res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('Error 404'); } }).listen(8484);