2 * This module contains some common helpers shared between middlewares
5 var mime = require('mime')
6 var log = require('../logger').create('web-server')
8 var PromiseContainer = function () {
11 this.then = function (success, error) {
12 return promise.then(success, error)
15 this.set = function (newPromise) {
20 var serve404 = function (response, path) {
21 log.warn('404: ' + path)
22 response.writeHead(404)
23 return response.end('NOT FOUND')
26 var createServeFile = function (fs, directory) {
27 var cache = Object.create(null)
29 return function (filepath, response, transform, content) {
33 filepath = directory + filepath
36 if (!content && cache[filepath]) {
37 content = cache[filepath]
42 response.setHeader('Content-Type', mime.lookup(filepath, 'text/plain'))
44 // call custom transform fn to transform the data
45 responseData = transform && transform(content) || content
47 response.writeHead(200)
49 log.debug('serving (cached): ' + filepath)
50 return response.end(responseData)
53 return fs.readFile(filepath, function (error, data) {
55 return serve404(response, filepath)
58 cache[filepath] = data.toString()
60 response.setHeader('Content-Type', mime.lookup(filepath, 'text/plain'))
62 // call custom transform fn to transform the data
63 responseData = transform && transform(data.toString()) || data
65 response.writeHead(200)
67 log.debug('serving: ' + filepath)
68 return response.end(responseData)
73 var setNoCacheHeaders = function (response) {
74 response.setHeader('Cache-Control', 'no-cache')
75 response.setHeader('Pragma', 'no-cache')
76 response.setHeader('Expires', (new Date(0)).toString())
79 var setHeavyCacheHeaders = function (response) {
80 response.setHeader('Cache-Control', ['public', 'max-age=31536000'])
84 exports.PromiseContainer = PromiseContainer
85 exports.createServeFile = createServeFile
86 exports.setNoCacheHeaders = setNoCacheHeaders
87 exports.setHeavyCacheHeaders = setHeavyCacheHeaders
88 exports.serve404 = serve404