mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-05 16:58:59 +00:00
Caching favicon node client connection for speed.
This commit is contained in:
parent
b5edf68df9
commit
04afabc411
2 changed files with 42 additions and 34 deletions
|
@ -2,27 +2,30 @@ express = require 'express'
|
||||||
mongo = require 'mongodb'
|
mongo = require 'mongodb'
|
||||||
|
|
||||||
MONGODB_SERVER = if process.env.NODE_ENV == 'dev' then 'localhost' else 'db04'
|
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 = express.createServer()
|
||||||
app.use express.bodyParser()
|
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) =>
|
app.get /^\/rss_feeds\/icon\/(\d+)\/?/, (req, res) =>
|
||||||
# console.log "Req: #{req.params}"
|
# console.log "Req: #{req.params}"
|
||||||
feed_id = parseInt(req.params, 10)
|
feed_id = parseInt(req.params, 10)
|
||||||
@client.collection "feed_icons", (err, collection) ->
|
@collection.findOne _id: feed_id, (err, docs) ->
|
||||||
collection.findOne _id: feed_id, (err, docs) ->
|
if not err and docs and docs.data
|
||||||
if not err and docs and docs.data
|
etag = req.header('If-None-Match')
|
||||||
etag = req.header('If-None-Match')
|
if etag and docs.color == etag
|
||||||
if etag and docs.color == etag
|
res.send 304
|
||||||
res.send 304
|
|
||||||
else
|
|
||||||
res.header 'etag', docs.color
|
|
||||||
res.send new Buffer(docs.data, 'base64'),
|
|
||||||
"Content-Type": "image/png"
|
|
||||||
else
|
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
|
app.listen 3030
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
(function() {
|
(function() {
|
||||||
var MONGODB_SERVER, app, db, express, mongo,
|
var MONGODB_SERVER, app, db, express, mongo, server,
|
||||||
_this = this;
|
_this = this;
|
||||||
|
|
||||||
express = require('express');
|
express = require('express');
|
||||||
|
@ -8,38 +8,43 @@
|
||||||
|
|
||||||
MONGODB_SERVER = process.env.NODE_ENV === 'dev' ? 'localhost' : 'db04';
|
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 = express.createServer();
|
||||||
|
|
||||||
app.use(express.bodyParser());
|
app.use(express.bodyParser());
|
||||||
|
|
||||||
db.open(function(err, client) {
|
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) {
|
app.get(/^\/rss_feeds\/icon\/(\d+)\/?/, function(req, res) {
|
||||||
var feed_id;
|
var feed_id;
|
||||||
feed_id = parseInt(req.params, 10);
|
feed_id = parseInt(req.params, 10);
|
||||||
return _this.client.collection("feed_icons", function(err, collection) {
|
return _this.collection.findOne({
|
||||||
return collection.findOne({
|
_id: feed_id
|
||||||
_id: feed_id
|
}, function(err, docs) {
|
||||||
}, function(err, docs) {
|
var etag;
|
||||||
var etag;
|
if (!err && docs && docs.data) {
|
||||||
if (!err && docs && docs.data) {
|
etag = req.header('If-None-Match');
|
||||||
etag = req.header('If-None-Match');
|
if (etag && docs.color === etag) {
|
||||||
if (etag && docs.color === etag) {
|
return res.send(304);
|
||||||
return res.send(304);
|
|
||||||
} else {
|
|
||||||
res.header('etag', docs.color);
|
|
||||||
return res.send(new Buffer(docs.data, 'base64'), {
|
|
||||||
"Content-Type": "image/png"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
} 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');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue