Express.js Settings 的秘密

来源:互联网 发布:ubuntu更换桌面环境 编辑:程序博客网 时间:2024/06/11 16:54
Express.js Settings 的秘密

Express.js 是最厉害的框架之一。2011,我使用nodejs以来,它被我绝大多数的项目所应用。它的一个主要卖点、和其他框架一个不同点就是可配置性。可是,当我在写Express.js Guide 和Pro Express.js,我发现一些关于Express.js Setting 的“秘密”从未在他的文档中提及。 documentation (Figure 1).

以下是未提及的设置:
·json spaces
·etag

·query parser



Figure 1: Documented Express.js Settings


让我们每一个都仔细地看下吧. 这篇文章适用于Express.js 3.x 和 4.8.1,撰写本文时是其最新版本。
json spaces
当你使用Express.js 的 response.json() 函数去给客户端返回数据时, 你将会从这个特别的参数中受益:replacer 和 spaces.。前者是记录在网站上,而后者则不是。在express引擎下, 这些参数将被传递给JSON.stringify()函数。(MDN docs). JSON.stringify()函数广泛使用于 将本地javascript对象转换成json字符串。
spaces” 选项将JSON 的输出修改为文档的形式—“将目标字符串变成可打印的”. 例如,你可以设置spaces的值为4来控制每层的缩进。

每层四个空格:
//... Express.js app instantiation 
app.set('json spaces',4);
//... Express.js app routes

上面的语句将产生缩进排版,如图2.


Figure 2: JSON output with replacer and spaces set


在另一面, 当你使用response.json() 的默认设置时, (很可能是最小值), 它是输出是难以阅读的 (如图3所示).


Figure 3: JSON output without spaces set

我的建议是,当你的应用的开发模式为 (app.get('env')=='development’)时,将空格设置为2。
etag
ETag 或者实体标记是缓存机制之一。它的工作方式类似于 给页面内容对应的URL一个唯一的ID. 换句话来说, 如果给定URL的内容没有改变, etag不变,浏览器将使用缓存。

在图4中, 这个例子中你可以看到响应头中的Etag


Figure 4: ETag header is enabled
如果有人不知道它是什么或者如何使用它,最好别管它, 这意味着Etag默认将开启. 否则, 你可以关闭它:
//... Express.js app instantiation 
app.disable('etag'); 
//... Express.js app routes

这将会把Etag在响应头中排除。


Figure 5: ETag header is enabled
默认情况下, Express.js 使用的是 “weak” ETag. 其他可能的值有:
true: weak ETag, e.g., app.enable('etag'); 定制一个如图4所示的etag
false: 再也没有etag (IMHO not recommended), e.g.,app.disable('etag'); 定制一个如图5所示的响应头。
weak: weak ETag, e.g., app.set('etag', 'weak');
strong: strong ETag, e.g., app.set('etag', 'strong');

strong ETag 确保响应中每个字节都是一样的, 而 weak ETag 指的是响应在语义上是一样的。

query parser
查询, 或者查询字符串,是URL问号后面的数据, e.g., http://anywherelib.com?name=value&name2=value2. Express.js 将自动解析这些查询字符在中间件中。a middleware.

query parser 的默认值是继承与qsmodule.

 query parser所有可能的值如下:

false: 关闭解析true: 启用解析
simple: 使用 querystring module
extended: 使用 qs module
下面是关闭查询解析的用法示例 :
//... Express.js app instantiation 
app.set('query parser', false);
//... Express.js app routes
下面是使用extended 是用法示例:
//... Express.js app instantiation 
app.set('query parser', `extended`);
//... Express.js app routes
可以通过你自己的函数作为参数. 在这种情况下, 你将用自定义的函数代替解析库. 就像这个例子,
//... Express.js app instantiation 
app.set('query parser',function(value, options){
  //... value is a query string, process it here
});
//... Express.js app routes
尾声
跟往常一样, 请小心地使用这些未声明的特性. 同时也要注意框架的版本 (本文用的是  4.8.1).
This text is part of Azat’s upcoming book—Pro Express.js by Apress. If you liked this article, make sure to opt-in for the webapplog.com newsletter
0 0
原创粉丝点击