express 内置中间件入门

983 阅读5分钟

express只是node的http模块的封装,并没有很多内容,如果对http模块内容不太了解,可以回去复习复习我的教程,再看看官网的api哦。

// 引入express
var express = require('express');
var app = express();
  • express.json(options)

这是Express中内置的中间件功能之一。

可以将发送请求的请求体解析并放到req.body上以供开发者访问资源。

该中间件分析JSON并查看Content-Type标题与type选项匹配的请求。接受body的任何Unicode编码并支持以gzip和deflate的压缩算法

包含解析数据的新对象request.body在中间件之后被填充,如果没有要解析的主体,Content-Type则不匹配或发生错误,则会填充一个空对象。

options(部分选项):

属性 描述 类型 默认
inflate 启用或禁用处理压缩后的请求;当禁用时,请求被拒绝。 Boolean true
limit 最大请求主体大小。一个数字指定字节数;一个字符串传递给字节库以供解析。 Mixed “100kb” / 1000
strict 启用或禁用只接受数组和对象; 禁用时将接受JSON.parse接受的任何内容。 Boolean true
type 这用于确定中间件将解析的类型。该选项可以是字符串,字符串数组或函数。如果不是函数,则type选项直接传递到类型库,这可以是扩展名(如json),MIME类型(如application / json)或带有通配符的MIME类型(如* / / json)。如果一个函数,类型选项被称为fn(req),并且如果它返回一个真值,则请求被解析。 Mixed "application/json"
  • express.urlencoded(options)

它使用urlencoded有效负载分析传入请求,该中间件仅查看Content-Type标题与type选项匹配的请求。只接受UTF-8编码,并支持gzip和deflate。

包含数据的新对象request.body在中间件之后被填充,如果没有要解析的主体,Content-Type则不匹配或发生错误,则会填充空对象。该对象将包含键-值对,其中该值可以是一个字符串或阵列(时extended是false),或任何类型的(当extended是true)。

属性 描述 类型 默认
extended 此选项用于选择使用查询字符串库(如果为false)或qs库(如果为true)解析URL编码数据。这个“扩展”选项允许将丰富的对象和数组编码为URL编码格式,从而允许使用URL编码的类似JSON的体验。 Boolean true
inflate 启用或禁用处理压缩后的请求;当禁用时,请求被拒绝。 Boolean true
limit 最大请求主体大小。一个数字指定字节数;一个字符串传递给字节库以供解析。 Mixed “100kb”
parameterLimit 该选项控制URL编码数据中允许的最大参数数量。如果请求包含的参数多于此值,则会引发错误。 Number 1000
type 这用于确定中间件将解析的媒体类型。该选项可以是字符串,字符串数组或函数。如果不是函数,则type选项将直接传递到type-is库,这可以是扩展名(如urlencoded),MIME类型(如application / x-www-form-urlencoded)或带MIME类型的MIME类型通配符(如* / x-www-form-urlencoded)。如果一个函数,类型选项被称为fn(req),并且如果它返回一个真值,则请求被解析。 Mixed "application/x-www-form-urlencoded"
  • express.static(root, options)

这是Express中内置的中间件功能。它提供静态文件并基于服务静态。

注:为获得最佳结果,请使用反向代理缓存来提高服务静态资产的性能。

root参数指定要从中为静态文件的目录。该功能通过req.url与提供的root目录结合来确定要提供的文件。。当找不到文件时,它不是发送404响应,而是调用next()移动到下一个中​​间件,允许堆叠和回退。

options(部分选项):

属性 描述 类型 默认
dotfiles 确定如何处理以“.”开头的文件或目录 String “ignore”
etag 启用或禁用etag生成 Boolean true
extensions 如果找不到文件,会搜索具有指定扩展名的文件并返回找到的第一个文件,例如:'html','htm'。 Mixed false
fallthrough 让客户端错误作为未处理的请求发生,否则转发客户端错误。请参阅下面的下文。 Boolean true
index 设置目录的index文件(索引文件) Mixed “index.html”
redirect 当路径名称是目录时,重定向到尾随“/”。 Boolean true
dotfiles

此选项的可能值为:

  • “allow” - 没有针对dotfiles的特殊处理。
  • “deny” - 拒绝一个点文件的请求,回应403,然后调用next()。
  • “ignore” - 像dotfile不存在一样,使用404,然后调用next()。 注意:使用默认值,它不会忽略以点开头的目录中的文件。
fallthrough

如果选择此选项true,客户端错误的请求或对不存在的文件的请求将导致中间件调用next()进入下一个中间件。

如果为false,则会调用这些错误(即使是404)next(err)。

设置此选项为true,以便您可以将多个物理目录映射到相同的Web地址或路径以填充不存在的文件(多个static组合)。

如果您已经将该中间件安装在严格意义上为单个文件系统目录的路径中,则可以使用false路径,从而可以短接404s以减少压力。这个中间件也会回复所有的方法。

用法示例:

var options = {
  dotfiles: 'ignore',
  etag: false,
  extensions: ['htm', 'html'],
  index: false,
  maxAge: '1d',
  redirect: false,
  setHeaders: function (res, path, stat) {
    res.set('x-timestamp', Date.now())
  }
}

app.use(express.static('public', options))
  • express.Router(options)

express.Router(options)

option没什么东西,不解读直接罗列了。 属性

描述 默认 可用性
caseSensitive 启用区分大小写。 默认情况下禁用,将“/ Foo”和“/ foo”视为相同。
mergeParams 保留父路由器的req.params值。如果父和子有相互冲突的参数名称,则该子的值优先。 false
strict 启用严格的路由。 默认情况下,“/ foo”和“/ foo /”被路由器视为相同。