# app.set

将设置 name 分配给 value

# 概要

app.set(name, value)

# 描述

将设置 name 分配给 value。您可以存储任何您想要的值,但某些名称可用于配置服务器的行为。这些特殊名称列在 应用设置表 中。

为布尔属性调用 app.set('foo', true) 与调用 app.enable('foo') 相同。同样,为布尔属性调用 app.set('foo', false) 与调用 app.disable('foo') 相同。

使用 app.get() 检索设置的值。

app.set('title', 'My Site')
app.get('title') // "My Site"

# 应用程序设置

下表列出了应用程序设置。

请注意,子应用程序将:

  • 不继承具有默认值的设置值。您必须在子应用程序中设置该值。
  • 继承设置的值,没有默认值; 这些在下表中明确指出。

例外:子应用将继承 trust proxy的值,即使它有一个默认值(为了向后兼容);子应用在生产中不会继承 view cache的值(当 NODE_ENV为 "production" 时)。

属性 类型 描述 默认
case sensitive routing 布尔值 启用区分大小写。启用后,"/Foo" 和 "/foo" 是不同的路由。禁用时,"/Foo" 和 "/foo" 被视为相同。

注意:子应用将继承此设置的值。
N/A (undefined)
env 字符串 环境模式。生产环境一定要设置为"production";见 生产最佳实践:性能和可靠性。 process.env.NODE_ENV(NODE_ENV 环境变量)或 "development"(如果未设置 NODE_ENV)。
etag 多变 设置 ETag 响应标头。有关可能的值,请参阅 etag 选项表。有关 HTTP ETag 标头的更多信息。 weak
jsonp callback name 字符串 指定默认 JSONP 回调名称。 "callback"
json escape 布尔值 启用从 res.json、res.jsonp 和 res.send API 转义 JSON 响应。这会将字符 <、> 和 & 转义为 JSON 中的 Unicode 转义序列。这样做的目的是在客户端嗅探 HTML 响应时协助 缓解某些类型的持续性 XSS 攻击。

注意:子应用将继承此设置的值。
N/A (undefined)
json replacer 多变 JSON.stringify 使用的 'replacer' 参数。

注意:子应用将继承此设置的值。
N/A (undefined)
json spaces 多变 JSON.stringify 使用的 'space' 参数。这通常设置为用于缩进美化 JSON 的空格数。

注意:子应用将继承此设置的值。
N/A (undefined)
query parser 多变 通过将值设置为 false 来禁用查询解析,或者将查询解析器设置为使用 "simple" 或 "extended" 或自定义查询字符串解析函数。简单查询解析器基于 Node 的原生查询解析器 querystring。扩展查询解析器基于 qs。自定义查询字符串解析函数将接收完整的查询字符串,并且必须返回查询键及其值的对象。 "extended"
strict routing 布尔值 启用严格路由。启用后,路由将 "/foo" 和 "/foo/" 视为不同。否则,路由将 "/foo" 和 "/foo/" 视为相同。

注意:子应用将继承此设置的值。
N/A (undefined)
subdomain offset 数字 要删除以访问子域的主机的点分隔部分的数量。 2
trust proxy 多变 指示应用程序位于前端代理之后,并使用 X-Forwarded-* 标头来确定客户端的连接和 IP 地址。注意:X-Forwarded-* 标头很容易被欺骗,检测到的 IP 地址不可靠。启用后,Express 会尝试确定通过前端代理或一系列代理连接的客户端的 IP 地址。req.ips 属性,然后包含客户端连接通过的 IP 地址数组。要启用它,请使用 信任代理选项表 中描述的值。trust proxy 设置是使用 proxy-addr 包实现的。有关更多信息,请参阅其文档。注意:子应用将继承此设置的值,即使它具有默认值。 false(已禁用)
views 字符串或数组 应用程序视图的目录或目录数组。如果是数组,则按照它们在数组中出现的顺序查找视图。 process.cwd() + '/views'
view cache 布尔值 启用视图模板编译缓存。注意:子应用在生产中不会继承此设置的值(当 NODE_ENV 为 "production" 时)。 true 在生产中,否则未定义。
view engine 字符串 省略时使用的默认引擎扩展。注意:子应用将继承此设置的值。 N/A (undefined)
x-powered-by 布尔值 启用 "X-Powered-By: Express" HTTP 标头。 true

# trust proxy 设置选项

阅读 代理背后的 Express 了解更多信息。

类型
布尔值 如果是 true,则客户端的 IP 地址被理解为 X-Forwarded-* 标头中最左边的条目。如果是false,则应用理解为直接面向互联网,客户端的IP地址来源于req.connection.remoteAddress。这是默认设置。
字符串 包含逗号分隔值的字符串 字符串数组 要信任的 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 地址:

指定单个子网:app.set('trust proxy', 'loopback')

指定子网和地址:app.set('trust proxy', 'loopback, 123.123.123.123')

将多个子网指定为 CSV:app.set('trust proxy', 'loopback, linklocal, uniquelocal')

将多个子网指定为数组:app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal'])

指定时,IP 地址或子网将被排除在地址确定过程之外,并将离应用服务器最近的不受信任的 IP 地址确定为客户端的 IP 地址。
数字 信任来自前端代理服务器的 nth 跃点作为客户端。
函数 自定义信任实现。仅当您知道自己在做什么时才使用它。

app.set('trust proxy', (ip) => { if (ip === '127.0.0.1'

# etag 设置选项

注意:这些设置仅适用于动态文件,不适用于静态文件。express.static 中间件会忽略这些设置。

ETag 功能是使用 etag 包实现的。有关更多信息,请参阅其文档。

类型
布尔值 true 启用弱 ETag。这是默认设置。false 完全禁用 ETag。
字符串 如果 "strong",启用强 ETag。如果 "weak",启用弱 ETag。
函数 自定义 ETag 函数实现。仅当您知道自己在做什么时才使用它。app.set('etag', (body, encoding) => { return generateHash(body, encoding) // consider the function is defined })
Last Updated: 6/17/2023, 6:57:19 PM