npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

request-etag

v2.0.3

Published

Small, ETag-based, HTTP-response-caching module

Downloads

45,700

Readme

request-etag Build Status

Small, in-memory, ETag-based, HTTP-response-caching module. It is based on the two following popular NPM packages,

  • lru-cache: a cache object that deletes the least-recently-used items.
  • request: a simplified HTTP request client. This is used by default, but can be overridden in the request-etag constructor.

Usage

Configuration,

var cacheConfig = {
	max: 10 * 1024 * 1024
};

A default length function is injected into the cache object by request-etag. It returns the sum of the length of the key, and the length of the value as JSON. More details on the cache configuration options can be found on the lru-cache webpage.

var ETagRequest = require('request-etag');
var eTagRequest = new ETagRequest(cacheConfig);

The ETagRequest constructor takes a second optional argument which specifies the underlying HTTP request client to use. It defaults to request, so the above constructor call is equivalent to,

var eTagRequest = new ETagRequest(cacheConfig, require('request'));

Note that the signature of the underlying HTTP request client function MUST be the same as that of request (e.g. requestretry).

The first GET request will be sent without an If-None-Match header, and its response will contain a body.

eTagRequest('www.immutablepage.com', function (error, response, body) {
	if (!error && response.statusCode === 200) {
		console.log('Received 200 - body retrieved from response.');
		console.log(body);
	}
	if (!error && response.statusCode === 304) {
		console.log('Received 304 - body retrieved from cache.')
		console.log(body);
	}
});

Subsequent GET requests to the same URL will be sent with an If-None-Match header. The response code will be 304, and the response will not contain a body. However a body will be passed by the cache to the body parameter of the callback function.

Why is my request not cached?

Situations where the request response is not cached include,

  • the request is not a GET request,
  • The response has no entity tag in the header,
  • the request is sent with a non-empty cookie header,
  • the response body is bigger than the cache.

Contributing

Please run the following commands before submitting a pull-request,

npm run lint
npm run code-style
npm run test