Files
line_push/node_modules/serve-placeholder/src/index.js
T
2022-07-21 03:28:35 +00:00

65 lines
1.6 KiB
JavaScript

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)
}
}