sails.config.http
应用程序底层 HTTP 服务器的配置。这些属性通常在 config/http.js
配置文件中指定。
属性 | 类型 | 默认值 | 详情 |
---|---|---|---|
middleware |
参见 HTTP 中间件的常规默认值 | 一个字典,包含应用程序将在每个传入的 HTTP 请求上运行的所有 HTTP 中间件函数。 示例 |
|
middleware.order |
参见 HTTP 中间件顺序的常规默认值 | 一个中间件名称(字符串)数组,指示所有传入的 HTTP 请求的中间件运行顺序。 | |
cache |
31557600000 (1 年) |
当应用程序在 'production' 环境 中运行时,缓存 静态资源 的毫秒数。 更准确地说,这是响应静态资源请求时包含在“Cache-Control”头部的“max-age”值,即由 Express 静态中间件提供的任何平面文件,如图像、脚本、样式表等。 |
|
serverOptions |
{} |
仅 SSL:创建服务器时直接发送到 Node https 模块 的高级选项。这些选项将与您的 SSL 设置(如果有)合并。有关更多信息,请参见 createServer 文档。 |
|
trustProxy |
undefined |
这告诉 Sails/Express 如何解释“X-Forwarded”头。仅当您使用 HTTPS 并且 您部署在代理(例如 Heroku 等 PaaS)后面时才使用此设置。如果您的应用程序不符合该描述,则将其保留为 undefined。否则,您可以尝试将其设置为 true ,这适用于许多部署。如果这不起作用,请参见 此处 获取所有可用选项。 |
主体解析器 是 Sails/Express 应用程序用来读取和理解传入 HTTP 请求主体的工具。有许多不同的主体解析器可用,每个解析器都有其自身的优势和劣势。默认情况下,Sails 应用程序使用 Skipper,它是一个通用的解决方案,知道如何解析大多数类型的 HTTP 请求主体,并提供对流、多部分文件上传的支持。
您可以指定不同的主体解析器或具有
req
、res
和next
参数的自定义函数(就像任何其他 HTTP 中间件函数 一样)。
要自定义 Skipper,首先确保在您的应用程序中运行 npm install skipper --save
。接下来,取消 config/http.js
文件中以下代码的注释
bodyParser: (function _configureBodyParser(){
var skipper = require('skipper');
var middlewareFn = skipper({
strict: true,
// ... more Skipper options here ...
});
return middlewareFn;
})(),
然后从下表中传入任何选项。
属性 | 类型 | 默认值 | 详情 |
---|---|---|---|
maxWaitTimeBeforePassingControlToApp |
500 |
处理传入的多部分请求时等待的最大毫秒数,在将控制权传递给应用程序的策略和控制器之前。如果在经过此毫秒数后没有任何传入的文件上传,并且请求尚未完成发送其他数据,例如文本参数(即表单发出“close”),则将立即传递控制权,不再延迟。对于在负载均衡器、代理和/或 SSL 的特定组合后面运行的应用程序,可能需要增加此延迟(参见 https://github.com/balderdashy/skipper/issues/71#issuecomment-217556631))。 | |
maxTimeToWaitForFirstFile |
10000 |
在任何给定的上游中,等待第一个文件上传到达的最大毫秒数,然后再触发 .upload() 的回调。如果在经过此毫秒数后,给定上游上的第一个文件上传尚未到达,则会触发 ETIMEOUT 错误。 |
|
maxTimeToBuffer |
4500 |
在任何给定的实时 上游 开始接收传入的文件上传后,等待其连接到接收器的时间的最大毫秒数。Skipper 会暂停上游,以便允许应用程序策略和控制器操作中的自定义代码运行(例如,执行数据库查找),然后再将传入的文件上传“连接”到您想要的上传目标(本地磁盘、S3、gridfs 等)(例如,req.file('avatar').upload(...) )。传入的字节使用 Node.js 流中内置的缓冲和 TCP 反压组合 进行管理。最大缓冲时间是可配置的防御层,用于防止试图用挂起的文件上传淹没服务器的拒绝服务攻击。如果超时,将触发 EMAXBUFFER 错误。防止此类攻击的最佳防御措施是在控制器操作的顶部尽早将传入的文件上传连接到接收器。 |
|
strict |
true |
启用后,传入 HTTP 请求的主体仅在它看起来像数组或字典(即普通 JavaScript 对象)时才会被解析为 JSON。否则,如果禁用,主体解析器将接受 JSON.parse() 接受的任何内容(包括 null 、true 、false 、数字和双引号包裹的字符串)。虽然这些其他类型的数据在实践中并不常见,但它们在技术上与 JSON 兼容;因此,默认情况下此设置是启用的。 |
|
extended |
true |
是否理解 URL 编码的请求主体中方括号表示法的多个文本参数(例如,courseId[]=ARY%20301&courseId[]=PSY%20420 )将 HTTP 主体编码为数组(例如,courseId: ['ARY 301', 'PSY 420'], ... )。默认情况下启用。有关更多详细信息,请参见 https://github.com/expressjs/body-parser#extended。 |
|
onBodyParserError |
(参见详细信息) | 如果 Skipper 在解析请求主体时遇到错误(例如,如果它遇到格式错误的 JSON),则将调用的可选函数。该函数接受四个参数:err 、req 、res 和 next 。Sails 提供了一个默认实现,该实现以 400 状态和描述所遇到错误的消息响应请求。如果没有提供 onBodyParserError 函数,解析器错误将传递给 next() 并由下一个可用的 错误处理中间件 处理。 |
请注意,为了允许性能调整和其他高级配置,以这种方式传递给 Skipper 的选项也会传递给底层的 Express 主体解析器。有关更低级别选项的完整列表,请参见 body-parser 存储库。
大多数与 Express、Connect、Kraken、Loopback 或 Pillar 兼容的中间件也可以在 Sails 应用程序中使用。
- 请注意,在
sails.config.http.middleware
中配置的此 HTTP 中间件堆栈仅应用于真正的 HTTP 请求,在处理虚拟请求(例如套接字)时将被忽略。- 名为
router
的中间件负责处理应用程序的所有显式路由(即sails.config.routes
),以及为蓝图、策略等注入的影子路由。- 您不能使用键
order
定义自定义中间件函数(因为sails.config.http.middleware.order
具有特殊含义)。