const path = require('path') const defu = require('defu') const defaults = require('./defaults') module.exports = function createServePlaceholder (_options) { // Assign default options const options = defu(_options, defaults) return function servePlaceholderMiddleware (req, res, next) { // If response already sent, skip if (res.writableEnded) { return } // Get url from req object const url = req.url.split('?')[0] // Get ext of requst url const ext = path.extname(url) // Try to find a handler based on ext let handler = options.handlers[ext] // Skip middleware is handler is explictly set to false if (handler === false) { return next() } // In case of no handler guessed if (typeof handler === 'undefined') { if (options.skipUnknown) { // Skip this middleware return next() } else { // Use 'default' handler handler = 'default' } } // Set statusCode if (options.statusCode) { res.statusCode = options.statusCode } // Try to set appreciate mime type based on handler const mime = options.mimes[handler] if (mime) { res.setHeader('Content-Type', mime) } // Prevent caching if (options.noCache) { res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate') // HTTP 1.1 res.setHeader('Pragma', 'no-cache') // HTTP 1.0 res.setHeader('Expires', '0') // Proxies } // Try to find placeholder based on handler const placeholder = options.placeholders[handler] // Send placeholder and end response res.end(placeholder) } }