node package manager
Orgs are free. Discover, share, and reuse code in your team. Create a free org ยป



revision 0.0.3


An in-memory file cache written for instructional purposes. If you were to extend this for production purposes then you would need to cap memory consumption at some point and attrition out items which were accessed rarely. You would also want logging integration. It might make more sense at that point to integrate with a database backend allowing for a secondary level of caching.


The onChange() should really be using to detect a change in the file but currently that is listed as unstable in NodeJS version 0.6.15.

I really should inherit form events rather than attach it to the module.


Below is an example of using memfile with a simplistic web server.

var http = require("http"),
	path = require("path"),
	memfile = require("memfile"),
	mimetype = require("mimetype");

var file_list = [ 

// We're reading in a blocking manner here using setSync().
file_list.forEach(function (filename) {
	// Remember the files, mime type, and update if it changes
	memfile.setSync(filename, {
		mime_type: mimetype.lookup(filename), 
		on_change: true});

// Create the web server serving the clock web site
console.log("Starting web server)
http.createServer(function (req, res) {
	var file;

	// Handle special case urls	
	if (req.url === "/" || req.url === "/index.html") {
		req.url = "/clock.html";
	} else if (req.url === "/favicon.ico") {
		req.url = "/favicon.png";

	file = memfile.get(path.join("htdocs", req.url));
	if (file === true) {
		res.writeHead(200, {"Content-Type": file.mime_type)});
	} else {
		res.writeHead(404, {"Content-Type": "text/plain"});
		res.end(req.url + " not found.");
}).listen(8080, "localhost");