加载脚本文件的插件,响应内容优化。

pull/287/head
王良 2024-04-02 12:32:01 +08:00
parent 00d52f14fa
commit 23a57f7247
1 changed files with 15 additions and 7 deletions

View File

@ -1,9 +1,7 @@
const through = require('through2') const through = require('through2')
const zlib = require('zlib') const zlib = require('zlib')
// eslint-disable-next-line no-unused-vars
const url = require('url')
var httpUtil = {} const httpUtil = {}
httpUtil.getCharset = function (res) { httpUtil.getCharset = function (res) {
const contentType = res.getHeader('content-type') const contentType = res.getHeader('content-type')
const reg = /charset=(.*)/ const reg = /charset=(.*)/
@ -14,11 +12,11 @@ httpUtil.getCharset = function (res) {
return 'utf-8' return 'utf-8'
} }
httpUtil.isGzip = function (res) { httpUtil.isGzip = function (res) {
var contentEncoding = res.headers['content-encoding'] const contentEncoding = res.headers['content-encoding']
return !!(contentEncoding && contentEncoding.toLowerCase() === 'gzip') return !!(contentEncoding && contentEncoding.toLowerCase() === 'gzip')
} }
httpUtil.isHtml = function (res) { httpUtil.isHtml = function (res) {
var contentType = res.headers['content-type'] const contentType = res.headers['content-type']
return (typeof contentType !== 'undefined') && /text\/html|application\/xhtml\+xml/.test(contentType) return (typeof contentType !== 'undefined') && /text\/html|application\/xhtml\+xml/.test(contentType)
} }
const HEAD = Buffer.from('</head>') const HEAD = Buffer.from('</head>')
@ -42,6 +40,7 @@ function chunkByteReplace (_this, chunk, enc, callback, append) {
_this.push(chunk) _this.push(chunk)
callback() callback()
} }
function injectScriptIntoHtml (tags, chunk, script) { function injectScriptIntoHtml (tags, chunk, script) {
for (const tag of tags) { for (const tag of tags) {
const index = chunk.indexOf(tag) const index = chunk.indexOf(tag)
@ -71,9 +70,18 @@ module.exports = {
const filename = urlPath.replace(contextPath, '') const filename = urlPath.replace(contextPath, '')
const script = monkey.get(setting.script.defaultDir)[filename] const script = monkey.get(setting.script.defaultDir)[filename]
// log.info(`urlPath: ${urlPath}, fileName: ${filename}, script: ${script}`)
log.info('ds_script', filename, script != null) log.info('ds_script, filename:', filename, ', `script != null` =', script != null)
res.writeHead(200) const now = new Date()
res.writeHead(200, {
'DS-Middleware': 'ds_script',
'Content-Type': 'application/javascript; charset=utf-8',
'Cache-Control': 'public, max-age=86401, immutable', // 缓存1天
'Last-Modified': now.toUTCString(),
Expires: new Date(now.getTime() + 86400000).toUTCString(), // 缓存1天
Date: new Date().toUTCString()
})
res.write(script.script) res.write(script.script)
res.end() res.end()
return true return true