diff --git a/node/favicons.coffee b/node/favicons.coffee index 593503826..7352e5e1b 100644 --- a/node/favicons.coffee +++ b/node/favicons.coffee @@ -2,27 +2,30 @@ express = require 'express' mongo = require 'mongodb' MONGODB_SERVER = if process.env.NODE_ENV == 'dev' then 'localhost' else 'db04' -db = new mongo.Db('newsblur', new mongo.Server(MONGODB_SERVER, 27017)) +server = new mongo.Server(MONGODB_SERVER, 27017, + auto_reconnect: true + poolSize: 12) +db = new mongo.Db('newsblur', server) app = express.createServer() app.use express.bodyParser() - -db.open (err, @client) => + +db.open (err, client) => + client.collection "feed_icons", (err, @collection) => app.get /^\/rss_feeds\/icon\/(\d+)\/?/, (req, res) => # console.log "Req: #{req.params}" feed_id = parseInt(req.params, 10) - @client.collection "feed_icons", (err, collection) -> - collection.findOne _id: feed_id, (err, docs) -> - if not err and docs and docs.data - etag = req.header('If-None-Match') - if etag and docs.color == etag - res.send 304 - else - res.header 'etag', docs.color - res.send new Buffer(docs.data, 'base64'), - "Content-Type": "image/png" + @collection.findOne _id: feed_id, (err, docs) -> + if not err and docs and docs.data + etag = req.header('If-None-Match') + if etag and docs.color == etag + res.send 304 else - res.redirect '/media/img/icons/silk/world.png' + res.header 'etag', docs.color + res.send new Buffer(docs.data, 'base64'), + "Content-Type": "image/png" + else + res.redirect '/media/img/icons/silk/world.png' app.listen 3030 diff --git a/node/favicons.js b/node/favicons.js index 4bf706dbe..b1b9e0f0b 100644 --- a/node/favicons.js +++ b/node/favicons.js @@ -1,5 +1,5 @@ (function() { - var MONGODB_SERVER, app, db, express, mongo, + var MONGODB_SERVER, app, db, express, mongo, server, _this = this; express = require('express'); @@ -8,38 +8,43 @@ MONGODB_SERVER = process.env.NODE_ENV === 'dev' ? 'localhost' : 'db04'; - db = new mongo.Db('newsblur', new mongo.Server(MONGODB_SERVER, 27017)); + server = new mongo.Server(MONGODB_SERVER, 27017, { + auto_reconnect: true, + poolSize: 12 + }); + + db = new mongo.Db('newsblur', server); app = express.createServer(); app.use(express.bodyParser()); db.open(function(err, client) { - _this.client = client; + return client.collection("feed_icons", function(err, collection) { + _this.collection = collection; + }); }); app.get(/^\/rss_feeds\/icon\/(\d+)\/?/, function(req, res) { var feed_id; feed_id = parseInt(req.params, 10); - return _this.client.collection("feed_icons", function(err, collection) { - return collection.findOne({ - _id: feed_id - }, function(err, docs) { - var etag; - if (!err && docs && docs.data) { - etag = req.header('If-None-Match'); - if (etag && docs.color === etag) { - return res.send(304); - } else { - res.header('etag', docs.color); - return res.send(new Buffer(docs.data, 'base64'), { - "Content-Type": "image/png" - }); - } + return _this.collection.findOne({ + _id: feed_id + }, function(err, docs) { + var etag; + if (!err && docs && docs.data) { + etag = req.header('If-None-Match'); + if (etag && docs.color === etag) { + return res.send(304); } else { - return res.redirect('/media/img/icons/silk/world.png'); + res.header('etag', docs.color); + return res.send(new Buffer(docs.data, 'base64'), { + "Content-Type": "image/png" + }); } - }); + } else { + return res.redirect('/media/img/icons/silk/world.png'); + } }); });