app.set(name, value)

name设置项赋value值,name是[app settings table][24]中属性的一项。
对于一个类型是布尔型的属性调用app.set('foo', ture)等价于调用app.enable('foo')。同样的,调用app.set('foo', false)等价于调用app.disable('foo')
可以使用app.get()来取得设置的值:

  1. app.set('title', 'My Site');
  2. app.get('title'); // 'My Site'

Application Settings
如果name是程序设置之一,它将影响到程序的行为。下边列出了程序中的设置。

Property Type Value Default
case sensitive routing Boolean 启用区分大小写。 不启用。对/Foo/foo处理是一样。
env String 环境模型。 process.env.NODE_ENV(NODE_ENV环境变量)或者”development”
etag Varied 设置ETag响应头。可取的值,可以查阅[etag options table][25]。更多关于[HTTP ETag header][26]。 weak
jsonp callback name String 指定默认JSONP回调的名称。 ?callback=
json replacer String JSON替代品回调 null
json spaces Number 当设置了这个值后,发送缩进空格美化过的JSON字符串。 Disabled
query parser Varied 设置值为false来禁用query parser,或者设置simple,extended,也可以自己实现query string解析函数。simple基于Node原生的query解析,[querystring][27]。 “extend”
strict routing Boolean 启用严格的路由。 不启用。对/foo/foo/的路由处理是一样。
subdomain offset Number 用来删除访问子域的主机点分部分的个数 2
trust proxy Varied 指示app在一个反向代理的后面,使用x-Forwarded-*来确定连接和客户端的IP地址。注意:X-Forwarded-*头部很容易被欺骗,所有检测客户端的IP地址是靠不住的。trust proxy默认不启用。当启用时,Express尝试通过前端代理或者一系列代理来获取已连接的客户端IP地址。req.ips属性包含了已连接客户端IP地址的一个数组。为了启动它,需要设置在下面[trust proxy options table][28]中定义的值。trust proxy的设置实现使用了proxy-addr包。如果想获得更多的信息,可以查阅它的文档 Disable
views String or Array view所在的目录或者目录数组。如果是一个数组,将按在数组中的顺序来查找view process.cwd() + ‘/views’
view cache Boolean 启用视图模板编译缓存。 在生成环境默认开启。
view engine String 省略时,默认的引擎被扩展使用。
x-powered-by Boolean 启用X-Powered-By:ExpressHTTP头部 true

Options for trust proxy settings
查阅[Express behind proxies][29]来获取更多信息。





















TypeValue
Boolean

如果为true,客户端的IP地址作为X-Forwarded-*头部的最左边的条目。如果为false,可以理解为app直接与英特网直连,客户端的IP地址衍生自req.connection.remoteAddressfalse是默认设置。


IP addresses

一个IP地址,子网,或者一组IP地址,和委托子网。下面列出的是一个预先配置的子网名列表。



  • loopback - 127.0.0.1/8, ::1/128

  • linklocal - 169.254.0.0/16, fe80::/10

  • uniquelocal - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7


使用下面方法中的任何一种来设置IP地址:


  1. app.set(trust proxy, loopback) // specify a single subnet
    app.set(trust proxy, loopback, 123.123.123.123) // specify a subnet and an address
    app.set(trust proxy, loopback, linklocal, uniquelocal) // specify multiple subnets as CSV
    app.set(trust proxy, [loopback, linklocal, uniquelocal]) // specify multiple subnets as an array

当指定IP地址之后, 这个IP地址或子网会被设置了这个IP地址或子网的app排除在外, 最靠近程序服务的没有委托的地址将被看做客户端IP地址。


Number

信任从反向代理到app中间小于等于n跳的连接为客户端。


Function

客户自定义委托代理信任机制。如果你使用这个,请确保你自己知道你在干什么。


  1. app.set(trust proxy, function (ip) {
    if (ip === 127.0.0.1 || ip === 123.123.123.123) return true; // trusted IPs
    else return false;
    })

Options for etag settings
ETag功能的实现使用了[etag][30]包。如果你需要获得更多的信息,你可以查阅它的文档。

















TypeValue
Boolean

设置为true,启用weak ETag。这个是默认设置。设置false,禁用所有的ETag。

String
如果是strong,使能strong ETag。如果是weak,启用weak ETag。
Function

客户自定义ETag方法的实现. 如果你使用这个,请确保你自己知道你在干什么。


  1. app.set(etag, function (body, encoding) {
    return generateHash(body, encoding); // consider the function is defined
    })