New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

route-cache

Package Overview
Dependencies
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

route-cache - npm Package Compare versions

Comparing version 0.2.7 to 0.2.8

loadtests/app.js

134

index.js

@@ -1,20 +0,19 @@

'use strict';
var Eidetic = require('eidetic');
'use strict'
var Eidetic = require('eidetic')
var cacheStore = new Eidetic({
maxSize: 50,
canPutWhenFull: true
});
})
var queues = {};
var redirects = {};
var queues = {}
var redirects = {}
module.exports.cacheSeconds = function(ttl) {
return function(req, res, next) {
var key = req.originalUrl;
module.exports.cacheSeconds = function (ttl) {
return function (req, res, next) {
var key = req.originalUrl
if (redirects[key]) {
return res.redirect(redirects[key].status, redirects[key].url);
return res.redirect(redirects[key].status, redirects[key].url)
}
var value = cacheStore.get(key);
var value = cacheStore.get(key)

@@ -24,21 +23,21 @@ if (value) {

if (value.isJson) {
res.json(value.body);
res.json(value.body)
} else {
res.send(value.body);
res.send(value.body)
}
return;
return
}
res.original_send = res.send;
res.original_json = res.json;
res.original_redirect = res.redirect;
res.original_send = res.send
res.original_json = res.json
res.original_redirect = res.redirect
if (!queues[key]) {
queues[key] = [];
queues[key] = []
}
var didHandle = false;
var didHandle = false
function rawSend(data, isJson) {
var key = req.originalUrl;
function rawSend (data, isJson) {
var key = req.originalUrl

@@ -48,26 +47,25 @@ // pass-through for Buffer - not supported

if (Buffer.isBuffer(data)) {
queues[key]=[]; // clear queue
res.set('Content-Length', data.length);
res.original_send(data);
return;
queues[key] = [] // clear queue
res.set('Content-Length', data.length)
res.original_send(data)
return
}
}
didHandle = true;
var body = data instanceof Buffer ? data.toString() : data;
if (res.statusCode < 400) cacheStore.put(key, { body: body, isJson: isJson }, ttl);
didHandle = true
var body = data instanceof Buffer ? data.toString() : data
if (res.statusCode < 400) cacheStore.put(key, { body: body, isJson: isJson }, ttl)
// drain the queue so anyone else waiting for
// this value will get their responses.
var subscriber = null;
while (subscriber = queues[key].shift()) {
if (subscriber) {
process.nextTick(subscriber);
}
var subscriber = null
while (queues[key].length > 0) {
subscriber = queues[key].shift()
process.nextTick(subscriber)
}
if (isJson) {
res.original_json(body);
res.original_json(body)
} else {
res.original_send(body);
res.original_send(body)
}

@@ -77,23 +75,24 @@ }

// first request will get rendered output
if (queues[key].length === 0 && queues[key].push(function noop(){})) {
if (queues[key].length === 0) {
queues[key].push(function noop () {})
didHandle = false;
didHandle = false
res.send = function (data) {
if (didHandle) {
res.original_send(data);
res.original_send(data)
} else {
rawSend(data, false);
rawSend(data, false)
}
};
}
res.json = function (data) {
rawSend(data, true);
};
rawSend(data, true)
}
// If response happens to be a redirect -- store it to redirect all
// subsequent requests.
res.redirect = function(url) {
var address = url;
var status = 302;
res.redirect = function (url) {
var address = url
var status = 302

@@ -103,37 +102,36 @@ // allow statusCode for 301 redirect. See: https://github.com/expressjs/express/blob/master/lib/response.js#L857

if (typeof arguments[0] === 'number') {
status = arguments[0];
address = arguments[1];
status = arguments[0]
address = arguments[1]
} else {
console.log('res.redirect(url, status): Use res.redirect(status, url) instead');
status = arguments[1];
console.log('res.redirect(url, status): Use res.redirect(status, url) instead')
status = arguments[1]
}
}
redirects[key] = {url: address, status:status};
res.original_redirect(status, address);
};
redirects[key] = {url: address, status: status}
res.original_redirect(status, address)
}
next();
next()
// subsequent requests will batch while the first computes
} else {
queues[key].push(function() {
var value = cacheStore.get(key) || {};
queues[key].push(function () {
var value = cacheStore.get(key) || {}
if (value.isJson) {
res.json(value.body);
res.json(value.body)
} else {
res.send(value.body);
res.send(value.body)
}
});
})
}
};
};
}
}
module.exports.removeCache = function (url) {
if (redirects[url]) {
delete redirects[url]
}
cacheStore.del(url)
}
module.exports.removeCache = function(url) {
if (redirects[url])
delete redirects[url];
cacheStore.del(url);
};
module.exports.cacheStore = cacheStore;
module.exports.cacheStore = cacheStore
{
"name": "route-cache",
"version": "0.2.7",
"version": "0.2.8",
"description": "express middleware for caching your routes",
"main": "index.js",
"scripts": {
"test": "mocha -R spec test"
"test": "standard && mocha -R spec test"
},

@@ -27,4 +27,11 @@ "repository": {

"mocha": "2.5.3",
"morgan": "1.7.0",
"standard": "7.1.2",
"supertest": "1.2.0"
},
"standard": {
"ignore": [
"test/**"
]
},
"bugs": {

@@ -31,0 +38,0 @@ "url": "https://github.com/bradoyler/route-cache/issues"

@@ -8,3 +8,3 @@ # Route-Cache

[![NPM](https://nodei.co/npm/route-cache.png?downloads=true&downloadRank=true)](https://nodei.co/npm/route-cache/)
[![NPM](https://nodei.co/npm/route-cache.png?downloads=true&downloadRank=true)](https://nodei.co/npm/route-cache/) [![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)

@@ -14,3 +14,3 @@ Make your routes do this ->![dodging](http://forgifs.com/gallery/d/80400-8/Muhammad-Ali-dodges-punches.gif)

## Why?
- makes hard-working routes super-fast, under heavy-load
- makes hard-working routes super-fast, under heavy-load, [see Load Tests](loadtests)
- easy to use and fork for your needs

@@ -17,0 +17,0 @@ - works with gzip compression

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc