惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
N
News and Events Feed by Topic
Recent Announcements
Recent Announcements
D
Docker
M
MIT News - Artificial intelligence
L
LangChain Blog
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
博客园_首页
MongoDB | Blog
MongoDB | Blog
美团技术团队
S
Schneier on Security
G
GRAHAM CLULEY
月光博客
月光博客
有赞技术团队
有赞技术团队
Vercel News
Vercel News
Scott Helme
Scott Helme
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs
Google Online Security Blog
Google Online Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
量子位
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
Visual Studio Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threatpost
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Security Affairs
Cloudbric
Cloudbric
爱范儿
爱范儿
H
Heimdal Security Blog
PCI Perspectives
PCI Perspectives

囧克斯

奔四了,写给40岁的自己 有序退网 我和 Vue.js 的十年 我参与《代码之外 Beyond Code》的故事 博客站迁移至 VitePress 的备忘 写给我的奶奶 中文格式化小工具 zhlint 及其开发心得 vue-mark-display:用 markdown 语法轻松撰写幻灯片 我对技术会议的一些看法 VueConf Hangzhou 见闻 第四届 CSSConf CN 见闻 [译]Web 表单的未来 [译]苹果正在做一些他们的程序员明摆着不想要的东西 [译]为什么我不会无偿加班且你也不应该 [译]如果管理是唯一可走的路,那就完蛋了 [译]如何撰写 Git 提交信息 [译]C 程序的原则 Vue 2.0 来了! Weex 近 4 个月的开源之路 Weex 在 JS Runtime 内的多实例管理 我理解的 SPA 我理解的 Flux 架构 【整理】Vue 2.0 自 beta 1 到 beta 4 以来的主要更新 通过一张图走进 Vue 2.0 Code Review for Vue 2.0 Preview Vue 2.0 发布啦! 务实的小而美 Vue.js 1.0.0 发布了! [译]如何成为一名卓越的前端工程师 手机淘宝前端的图片相关工作流程梳理 [译]如何让办公室政治最小化 Vue.js 源码学习笔记 从原型到发布——“团队时间线” 1.0 开发心得 Vue + webpack 项目实践 用 Koa 写服务体验 webcomponents 笔记 之 配置管理 小秀个人的13~14年摄影作品 (共19张) 由今年D2前端论坛想到的 [译]CSS命名神马的真心难 [译]Git 分支的最佳实践 [译]撰写可测试的 JavaScript [译]语义化版本管理 [译]通过HTML5 Canvas API调节图像的亮度和颜色 [译]JavaScript V8性能小贴士 [译]视觉差,走起! [译]Chrome开发者工具中评估性能的五大新特性 精气神儿 细节无微不至,彩屏让人又爱又恨——新老“神机”大对决:Nokia 1050 vs Nokia 1202 秦升拿到红牌之后…… 用Sass重新整理自己的博客主题样式 巧用 RequireJS Optimizer 给传统的前端项目打包 编辑器小调查结果 [译]JSLint 文档 烟火——写给蛇年的傲游和我 小秀个人的全年摄影作品 (共15张) 2012年终毫无正能量的总结 标签?ID?还是CLASS? 微创新=伪创新 HTML5峰会归来 分享bookmarklet一则:随意阅读 国际羽联和中国队之间的恶性循环 ZeroClipboard 学习笔记 “思考人生” 听杨东杰弹吉他 学习精髓 网站装修笔记20120426 网站装修笔记20120414 网站装修笔记20120406 分享Typecho插件:百度统计助手 我的得奖感言 网站装修笔记20120331 用CSS3制作尖角标签按钮样式 分享Typecho插件:Markdown 解析器 + 编辑器 分享Typecho皮肤:我的字很大 汇总自己过去的一些HTML5科普文章 html5中的消息通信简介 + 我的新网站开张 网站装修计划 Typed Arrays 是神马? 文明看球 HTML5中的文件处理 之 File Writer API HTML5中的文件处理 之 File API 独生子女、互相等和不耐烦 IndexedDB技术简介(四) IndexedDB技术简介(三) IndexedDB技术简介(二) IndexedDB技术简介(一) 把博客的字体进一步调大,同时去掉了侧边栏 “模仿别人是为了找到自己” 写给我未婚妻的2011年 写给自己的2011年 手把手教你入门EaselJS做HTML5动画 “吃了吧,不吃就浪费了” 写给傲游的2011年 所谓专业 写给HTML5的2011年 对HTML5中LocalStorage的一些使用建议 回味一下我2011年看到的最过瘾的5场足球比赛 浅浅浅谈开饭店被顾客吃出“异物”的用户体验 前端的本职 继续对Mac穷追猛打 之 修改原生按钮文字大小的技巧
Connect中间件使用手册
勾三股四 · 2013-06-02 · via 囧克斯

以下内容大多译自Connect官网 2013-06-02

Connect是基于Node的中间件框架(middleware framework),提供超过18种官方中间件以及更多的第三方中间件。

示例:

var app = connect()
  .use(connect.logger('dev'))
  .use(connect.static('public'))
  .use(function(req, res){
    res.end('hello world\n');
  })
 .listen(3000);

安装方式:

$ npm install connect

依次介绍官方中间件


1. 日志 logger ​

服务器请求日志,支持自定义格式,支持传入 options 选项对象或 format 字符串。

选项 ​

  • format 表示日志格式的字符串,由各种记号(token)组合而成
  • stream 表示输出到哪里。默认是 stdout
  • buffer 表示缓冲的时间间隔,默认为 1000ms
  • immediate 是否在请求(request)的时候立即写日志,而不是在回应(response)的时候

记号(Tokens) ​

  • :req[header] (如 :req[Accept])
  • :res[header] (如 :res[Content-Length])
  • :http-version、:response-time、:remote-addr、:date、:method、:url、:referrer、:user-agent、:status

默认的日志格式(Formats) ​

defaultshorttiny

其中 default 代表的格式是:

:remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"

另外还有 dev 格式,可以着色输出响应状态,开发时适用。

其它 ​

记号和格式都是可以自定义更多的,通过

  • connect.logger.token(name, function (req, res) {...})
  • connect.logger.format(name, stringOrFunction)

更多细节请移步至此

2. 防止跨域伪造请求 csrf ​

默认情况下该中间件会生成一个名为“_csrf”的记号,该记号可以作为请求的状态、表单提交的隐藏属性值或查询字符串等等,并在服务器端与 req.session._csrf 属性进行核对。如果核对出错,则会出现403错误。

默认的 value 函数会以此核对 bodyParser() 中间件生成的 req.bodyquery() 生成的 req.query 以及名为“X-CSRF-Token”的头信息。

该中间件需要会话支持,因此必须出现在 session()cookieParse() 中间件之后。

默认的 defaultValue() 实现如下:

function defaultValue(req) {
  return (req.body && req.body._csrf)
    || (req.query && req.query._csrf)
    || (req.headers['x-csrf-token']);
}

更多细节请移步至此

3. 压缩 compress ​

Gzip压缩的中间件

支持的方法都在 connect.compress.methods 中,通过 connect.compress.filter(req, res) 方法判断文件是否需要压缩,默认压缩Content-Type含json、text或javascript的文件。

更高级的操作是可以将具体压缩方法的参数通过options参数传进去:

connect.compress({
    chunkSize: ..., // default 16*1024
    windowBits: ...,
    level: ..., // 0-9
    memLevel: ..., // 1-9
    strategy: ...
})

更多细节请移步至此

4. HTTP基础认证 basicAuth ​

  • 提供回调函数 connect.basicAuth(function (user, pass) {...}) ,如果这个回调函数返回 true ,则获得访问权限。
  • 提供异步的调用方式 connect.basicAuth(function (user, pass, callback))
  • 直接有效的单一用户名密码的方式 connect.basicAuth('username', 'password')

更多细节请移步至此

5. 主体解析器 Body Parser ​

可扩展的解析器,对请求的body进行解析。支持_application/json_、application/x-www-form-urlencodedmultipart/form-data

其等同于:

app.use(connect.json());
app.use(connect.urlencoded());
app.use(connect.multipart());

更多细节请移步至此

5.1 json ​

_application/json_解析器,并将结果放至 req.body

选项 ​

  • strict 是否严格解析,当值为 false 时,理论上 JSON.parse() 能解析的数据都是被允许的
  • reviver 用作 JSON.parse() 方法的第二参数
  • limit 字节数限制,默认不开启

更多细节请移步至此

5.2 urlencoded ​

_application/x-www-form-urlencoded_解析器,并将结果放至 req.body

选项 ​

  • limit 字节数限制,默认不开启

更多细节请移步至此

5.3 multipart ​

_multipart/form-data_解析器,并将结果放至 req.bodyreq.files

选项 ​

  • limit 字节数限制,默认不开启
  • defer 延时处理并不等 end 事件触发就调用 req.form.next() 展示大表单。该选项在需要绑定 progress 事件时可用。

更多细节请移步至此

6. 超时时间 timeout ​

用法: connect.timeout(ms) 。如果请求超时则指向408错误。

另, req 对象会多一个 req.clearTimeout() 方法,用来在必要的情况下取消计时。

更多细节请移步至此

7. Cookie解析器 cookieParser ​

解析头中的_Cookie_并将结果放至 req.cookies 。你还可以通过 connect.cookieParser(secret) 中的 secret 参数对cookie进行加密。该密码可以通过 req.secret 进行取值。

更多细节请移步至此

8. 会话 session ​

详情略。

更多细节请移步至此

9. 基于cookie的会话支持 cookieSession ​

connect.cookieSession({ secret: 'tobo!', cookie: { maxAge: 60 * 60 * 1000 }});

选项 ​

  • key cookie名,默认是 connect.sess
  • secret 密码
  • cookie 会话cookie的设置,默认是 { path: '/', httpOnly: true, maxAge: null }
  • proxy 信任反向代理

清除会话 ​

req.session = null;

更多细节请移步至此

10. 支持伪造HTTP方法 methodOverride ​

当检查到方法重载的时候,把原方法存入 req.originalMethod ,检查的字段可以通过参数 key 设置,默认为 _method

connect.methodOverride(key)

更多细节请移步至此

11. 响应时间 responseTime ​

计算响应时间并展示为 X-Response-Time

更多细节请移步至此

12. 静态服务缓存 staticCache ​

在内存中建立static中间件的缓存。默认最大缓存对象为128个,每个对象的最大体积是256k,总共大约32mb。

选项 ​

  • maxObjects 最大缓存对象个数,默认128个
  • maxLength 最大缓存对象体积,默认256kb

更多细节请移步至此

12.1 静态文件服务 static ​

为给定的 root 路径提供静态文件服务,例如

connect.static(__dirname + '/public', {maxAge: 86400000})

选项 ​

  • maxAge 浏览器缓存时间,默认是 0
  • hidden 是否允许访问隐藏文件,默认是 false
  • redirect 路径是目录时是否在结尾自动加 / ,默认是 true

MIME表 ​

展示MIME模块,可读写

connect.static.mime

更多细节请移步至此

13. 目录 directory ​

列出目录的文件列表

选项 ​

  • hidden 是否显示点(.)开头的文件,默认是 false
  • icons 是否显示文件图标,默认是 false
  • filter 过滤文件的函数,默认是 false

图标文件在 lib/public/icons/ 目录中

其它 ​

  • connect.directory.html() 输出html格式的内容
  • connect.directory.json() 输出json格式的内容
  • connect.directory.plain() 输出文本格式的内容

更多细节请移步至此

14. 虚拟主机 vhost ​

例如:

connect()
  .use(connect.vhost('foo.com', fooApp))
  .use(connect.vhost('bar.com', barApp))
  .use(connect.vhost('*.com', mainApp))

更多细节请移步至此

15. 站点图标 favicon ​

默认图标为 lib/public/favicon.ico ,可更改,调用方式:

connect.favicon('public/favicion.ico', {maxAge: 86400000})

选项 ​

  • maxAge 过期时间,默认是1天(86400000)

更多细节请移步至此

16. 请求大小限制 limit ​

限制请求的body字节数,可传入一个数字或代表容量大小的字符串,比如: 5mb200kb1gb

connect.limit('5.5mb')

更多细节请移步至此

17. 查询字符串 query ​

自动解析查询字符串,生成 req.query

更多细节请移步至此

18. 错误处理 errorHandler ​

灵活的错误处理机制,开发环境下提供出错信息和栈追踪,回应信息支持纯文本、HTML和JSON

  • 在_text/plain_的情况下回应文本格式的错误信息
  • 在_application/json_情况下,回应 { "error": error }
  • 在允许的情况下回应HTML错误信息

更多细节请移步至此

(完)