UNPKG

node-image-farmer

Version:

Image thumbnailing middleware based on connect-thumb. Adds ability to retrieve files from the filesystem.

61 lines (53 loc) 2.1 kB
var express = require('express'); var app = express(); var urlDecoder = require('../lib/url-decoder'); var imageFarmer = require('../lib/node-image-farmer'); var security = require('../lib/security'); var debug = require('debug')('node-image-farmer:app'); var fs = require('fs'); var appConfig = JSON.parse(fs.readFileSync(__dirname + '/../config/appConfig.json', 'utf8')); var argv = require('minimist')(process.argv.slice(2)); //set the process name if(argv["_"] && argv["_"].length > 0) { process.title = argv["_"][0]; } var extensionMimeMapping = { jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', png: 'image/png' } app.get(appConfig.baseDirectory+"/*", function (req, res) { //decode URL var urlOptions = urlDecoder.processRequest(req, appConfig.presets); //ensure the correct file extension if(!security.testExtension(urlOptions.extension, appConfig.allowedExtensions)){ res.writeHead(403); res.end('Forbidden File Extension! \n\nAllowed: '+JSON.stringify(appConfig.allowedExtensions)+"\nInput: "+urlOptions.extension); return; } imageFarmer.processOptions(urlOptions, appConfig).then(function(fileStream){ //send the file stream now var responseHeaders = { maxAge: appConfig.browserTTL || 0 }; responseHeaders['Content-Type'] = extensionMimeMapping[urlOptions.extension.toLowerCase()] ? extensionMimeMapping[urlOptions.extension.toLowerCase()] : 'text/plain'; res.writeHead(200, responseHeaders); fileStream.pipe(res); }).catch(function(err){ if(err.responseCode){ res.writeHead(err.responseCode); res.end(err.message); }else{ //defualt is not found res.writeHead(401); res.end(err); } debug(err); }); }); var server = app.listen(appConfig.port, function () { var host = server.address().address; var port = server.address().port; debug('node-image-farmer app listening at http://%s:%s%s', host, port, appConfig.baseDirectory); });