@ fastify/ 发送
发送是一个用于从文件系统流出文件作为 HTTP 响应的库 支持部分响应(范围),有条件的GET谈判(如果-Match, 若-未修改-辛,若-无-Match,若-已修改-辛,高测试覆盖率, 和颗粒性事件,可借以在 应用或框架.
安装
这是一个 节点.js 模块
npm 登记。安装使用
npm install 命令数字 :
$ npm install @fastify/send
类型脚本
@types/mime@3 如果想要使用类型脚本,必须使用;
@types/mime@4 删除了 mime 类型.
$ npm install -D @types/mime@3
API 密码
const send = require('@fastify/send')
发送( req, 路径, [选项])
提供 statusCode, (中文(简体) ), headers,以及 stream 给定路径发送到
res编辑 req 是节点.js HTTP 请求和 path 是一个 urlencoded 路径
以发送(urlencoded,而非实际文件系统路径).
选项
接受区域
启用或禁用接受范围请求, 默认为真实 .
禁用此选项不会发送 Accept-Ranges 忽略内容
会 议 日 程 和 议 程 Range 请求头.
缓存控制
启用或禁用设置 Cache-Control 响应头,默认为
没错 禁用会忽略 immutable 财务报告和审定财务报表 maxAge 选项.
内容类型
默认情况下,此库使用 mime 模块设置 Content-Type
以请求的文件扩展名为基础的响应.
要禁用此功能, 设置 contentType 改为 false。 。 。 .
这个 Content-Type 如果已禁用, 需要手动设置页眉 .
点文件
设定“ 点文件” 遇到时如何处理 。 点文件是一个文件
或者以点("")开头的目录. 注意此检查是在
路径本身而不检查路径是否存在于
磁盘。 若为 root 指定,只有根上方的点文件是
选中( 即当设置时, 根本身可以在点文件中)
以"dey"来表示.
'allow'对点文件没有特殊待遇.'deny'发送一个403 对于任何一个点文件的请求.'ignore'假装点文件不存在 404.
默认值为 类似 改为 'ignore',但
此默认不会忽略目录中开始的文件
带有点,用于后相相.
结束
流结束的字节相抵,默认为文件长度
减一. 结束在溪流中是包容性的,意思是 end: 3 将包括
溪中第四字节.
爱塔格
启用或禁用 etag 生成, 默认为真实 .
扩展
如果给定文件不存在,请尝试附加给定的扩展名之一,
以给定顺序。 默认情况下,此选项已禁用( 设置为 false) (中文(简体) ). 一个
为无扩展名的 HTML 文件服务的示例值 : ['html', 'htm']。 。 。 .
如果请求的文件已有扩展名, 则跳过 .
不可改变
启用或禁用 immutable 指令中 Cache-Control 回应
页眉,默认为 false如果设置为 true,则 maxAge 选项应当
也指定可以缓存。 这个 immutable 指令将防止
支持客户在其存在期间提出有条件请求
maxAge 选项以检查文件是否更改.
指数
默认发送支持“ index.html” 文件以禁用此功能
设定 false 或提供新索引通过字符串或数组
以优先顺序排列.
最后修改
启用或禁用 Last-Modified 标题,默认为真. 使用文件
系统的最后修改值.
最大年龄
为 HTTP 缓存提供以毫秒为单位的最大年龄, 默认为 0 . 也可以是被 分钟 模块.
最大线程切变大小
指定最大响应内容大小,默认为整个文件大小.
当 acceptRanges 这是真的.
文件夹
以最终选中的文件的绝对路径和文件系统统计调用
在文件解析后,但在回复处理和文件流创建之前.
召回可能是同步的,也可能是还原承诺. 如果它还回来,
send 等待它解决。 如果召回 放弃或返回的承诺
拒绝,操作中止 send() 拒绝.
根号
服务文件相对于 path。 。 。 .
开始
启动流的字节相抵,默认为 0。 开始是包容性的,
含义 start: 2 将包含在溪流中的第3字节.
高水压
提供时, 此选项将设定内部的字节数最大值 缓冲器在从原始资源中读取之前会保持. 如果您省略了此选项( 或通过未定义的) , 节点会回到 其可读二进制流的内置默认值.
.mime (英语)
这个 mime 导出是全球实例
mime npm 模块。 。 。 .
用于配置与文件扩展名相关的 MIME 类型 以及关于如何解决文件的 MIME 类型的其他选项(如 用于未知文件扩展名的默认类型).
缓存
没错 没有 执行内部缓存, 您应该使用反向代理缓存 比如这个的Varnish 或者那些叫CDN的花花公子 狦 应用程序小到能够从单节点内存中受益 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}它已经足够小了 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}它完全不需要被挖出 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}.
调试
启用 debug() 仪器输出导出 诺德-DEBUG数字 :
$ NODE_DEBUG=send node app
正在测试
$ npm install
$ npm test
实例
提供特定文件
这个简单的例子会向所有请求发送一个特定文件.
const http = require('node:http')
const send = require('send')
const server = http.createServer(async function onRequest (req, res) {
const { statusCode, headers, stream } = await send(req, '/path/to/index.html')
res.writeHead(statusCode, headers)
stream.pipe(res)
})
server.listen(3000)
服务目录中的所有文件
这个简单的例子将只服务于一个
指定目录为顶级。 例如,请求
GET /foo.txt 将返回 /www/public/foo.txt。 。 。 .
const http = require('node:http')
const parseUrl = require('parseurl')
const send = require('@fastify/send')
const server = http.createServer(async function onRequest (req, res) {
const { statusCode, headers, stream } = await send(req, parseUrl(req).pathname, { root: '/www/public' })
res.writeHead(statusCode, headers)
stream.pipe(res)
})
server.listen(3000)
自定义文件类型
const http = require('node:http')
const parseUrl = require('parseurl')
const send = require('@fastify/send')
// Default unknown types to text/plain
send.mime.default_type = 'text/plain'
// Add a custom type
send.mime.define({
'application/x-my-type': ['x-mt', 'x-mtt']
})
const server = http.createServer(function onRequest (req, res) {
const { statusCode, headers, stream } = await send(req, parseUrl(req).pathname, { root: '/www/public' })
res.writeHead(statusCode, headers)
stream.pipe(res)
})
server.listen(3000)
自定义目录索引视图
这是为目录结构服务的一个例子,其中包含: 自定义功能,用于提供目录的列表.
const http = require('node:http')
const fs = require('node:fs')
const parseUrl = require('parseurl')
const send = require('@fastify/send')
// Transfer arbitrary files from within /www/example.com/public/*
// with a custom handler for directory listing
const server = http.createServer(async function onRequest (req, res) {
const { statusCode, headers, stream, type, metadata } = await send(req, parseUrl(req).pathname, { index: false, root: '/www/public' })
if(type === 'directory') {
// get directory list
const list = await readdir(metadata.path)
// render an index for the directory
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' })
res.end(list.join('\n') + '\n')
} else {
res.writeHead(statusCode, headers)
stream.pipe(res)
}
})
server.listen(3000)
从自定义错误处理的根目录服务
const http = require('node:http')
const parseUrl = require('parseurl')
const send = require('@fastify/send')
const server = http.createServer(async function onRequest (req, res) {
// transfer arbitrary files from within
// /www/example.com/public/*
const { statusCode, headers, stream, type, metadata } = await send(req, parseUrl(req).pathname, { root: '/www/public' })
switch (type) {
case 'directory': {
// your custom directory handling logic:
res.writeHead(301, {
'Location': metadata.requestPath + '/'
})
res.end('Redirecting to ' + metadata.requestPath + '/')
break
}
case 'error': {
// your custom error-handling logic:
res.writeHead(metadata.error.status ?? 500, {})
res.end(metadata.error.message)
break
}
default: {
// your custom headers
// serve all files for download
res.setHeader('Content-Disposition', 'attachment')
res.writeHead(statusCode, headers)
stream.pipe(res)
}
}
})
server.listen(3000)
许可证
许可证根据 麻省理工学院。 。 。 .