增加静态文件load方法, 不强制为下载; 优化头信息设置; 增加缓存快捷设置

master
yutent 2024-07-18 10:03:48 +08:00
parent 08576a85e0
commit 1021ef2666
2 changed files with 33 additions and 5 deletions

View File

@ -56,6 +56,15 @@ export default class Response {
this.#res.end(buf) this.#res.end(buf)
} }
/**
* 设置缓存时长, 单位秒
*/
set expires(time = 3600) {
let t = new Date(Date.now() + time * 1000)
this.set('Expires', t.toGMTString())
this.set('Cache-Control', 'max-age=' + time)
}
/** /**
* [error http 错误显示] * [error http 错误显示]
* @param {Number} code [http错误码] * @param {Number} code [http错误码]
@ -108,7 +117,7 @@ export default class Response {
data += '' data += ''
data = data || STATUS_TEXT[this.status] data = data || STATUS_TEXT[this.status]
this.type = 'html' this.type = 'html'
this.set('Content-Length', Buffer.byteLength(data)) this.length = Buffer.byteLength(data)
this.body = data this.body = data
} }
@ -142,6 +151,8 @@ export default class Response {
} }
} }
this.expires = 3600
if (Buffer.isBuffer(target)) { if (Buffer.isBuffer(target)) {
data = target data = target
} else { } else {
@ -156,7 +167,7 @@ export default class Response {
size = end - start size = end - start
} }
} }
this.set('Content-Length', size) this.length = size
return fs.origin return fs.origin
.createReadStream(target, { start, end }) .createReadStream(target, { start, end })
.pipe(this.#res) .pipe(this.#res)
@ -169,10 +180,27 @@ export default class Response {
data = data.slice(start, end) data = data.slice(start, end)
} }
this.set('Content-Length', data.length) this.length = data.length
this.body = data this.body = data
} }
load(file, type) {
let stat = fs.stat(file)
if (stat.isFile()) {
let size = stat.size
let _type = type || file.split('.').pop() || 'stream'
this.expires = 30 * 24 * 3600
this.type = _type
this.length = stat.size
return fs.origin.createReadStream(file).pipe(this.#res)
} else {
this.status = 404
this.body = null
}
}
/** /**
* [send json格式输出] * [send json格式输出]
* @param {Num} code [返回码] * @param {Num} code [返回码]
@ -196,7 +224,7 @@ export default class Response {
output = JSON.stringify({ code, msg, data }) output = JSON.stringify({ code, msg, data })
this.type = 'json' this.type = 'json'
this.set('Content-Length', Buffer.byteLength(output)) this.length = Buffer.byteLength(output)
// 只设置200以上的值 // 只设置200以上的值
if (code && code >= 200 && code <= 599) { if (code && code >= 200 && code <= 599) {

View File

@ -1,6 +1,6 @@
{ {
"name": "@gm5/response", "name": "@gm5/response",
"version": "2.0.2", "version": "2.1.0",
"type": "module", "type": "module",
"description": "对Http的response进一步封装, 提供常用的API", "description": "对Http的response进一步封装, 提供常用的API",
"main": "index.js", "main": "index.js",